Ruby:嵌套数组作为实例变量表现得很奇怪
Ruby: Nested Array behaving strangley as an Instance Variable
对于我们的作业,我们打算在任意大小的棋盘上创建井字游戏,并接受数组作为输入。我仍然没有完全掌握 attr_accessor 模块,而且我很确定我用错了它。
class Board
attr_accessor :grid
def initialize(grid = nil)
if grid.nil?
@grid = Array.new(3, Array.new(3, nil))
else
@grid = grid
end
end
def place_mark(pos, mark)
@grid[pos[0]][pos[1]] = mark
end
end
我的主要问题是,尽管看起来 'place_mark' 应该只将输入放在一个位置。我得到以下信息:
game.place_mark([0,0], :X) #=> [[:X, nil, nil], [:X, nil, nil], [:X, nil, nil]]
当我在 class 之外重新创建它时,它就像我认为的那样工作。我搞砸了什么?
董事会 class 和 attr_accessor
都没有问题。然而,网格的初始化不起作用。 @grid = Array.new(3, Array.new(3, nil))
是罪魁祸首。第四个代码示例in the docs
展示了它应该如何完成,上面的文字解释了为什么 OP 的代码表现得像它那样。每个 Ruby 学生至少被困一次。
对于我们的作业,我们打算在任意大小的棋盘上创建井字游戏,并接受数组作为输入。我仍然没有完全掌握 attr_accessor 模块,而且我很确定我用错了它。
class Board
attr_accessor :grid
def initialize(grid = nil)
if grid.nil?
@grid = Array.new(3, Array.new(3, nil))
else
@grid = grid
end
end
def place_mark(pos, mark)
@grid[pos[0]][pos[1]] = mark
end
end
我的主要问题是,尽管看起来 'place_mark' 应该只将输入放在一个位置。我得到以下信息:
game.place_mark([0,0], :X) #=> [[:X, nil, nil], [:X, nil, nil], [:X, nil, nil]]
当我在 class 之外重新创建它时,它就像我认为的那样工作。我搞砸了什么?
董事会 class 和 attr_accessor
都没有问题。然而,网格的初始化不起作用。 @grid = Array.new(3, Array.new(3, nil))
是罪魁祸首。第四个代码示例in the docs
展示了它应该如何完成,上面的文字解释了为什么 OP 的代码表现得像它那样。每个 Ruby 学生至少被困一次。