Ruby:嵌套数组表现为strangley作为实例变量

时间:2017-04-28 23:38:31

标签: ruby multidimensional-array class-instance-variables

对于我们的任务,我们打算在任何大小的板上创建井字游戏并接受数组作为输入。我仍然没有完全掌握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]]

当我在课外重新创建它时,它就像我认为的那样工作。我搞砸了什么?

1 个答案:

答案 0 :(得分:1)

Board类和attr_accessor没有任何问题。然而,网格的初始化不起作用。 @grid = Array.new(3, Array.new(3, nil))是罪魁祸首。第四个代码示例in the docs 展示了它应该如何完成,上面的文字解释了为什么OP的代码表现得像它一样。每个Ruby学生都至少被这一次困住了。