Ruby 2D массив назначений

Так что у меня есть крестики-ноликиboard учебный класс. Увидеть ниже:

class Board
  attr_accessor :grid

  def initialize(grid = Array.new(3, Array.new(3, nil)))
    @grid = grid
  end

  def place_mark(position, symbol)
    @grid[position[0]][position[1]] = symbol
  end
end

Всякий раз, когда я звонюplace_mark метод, и попытался назначить символ для элемента в массиве 2D, весь столбец будет назначен.

board = Board.new
board.place_mark([0,0], :x)

Приведет к

[[:X, nil, nil], 
 [:X, nil, nil], 
 [:X, nil, nil]]

Где желаемый результат

[[:X , nil, nil], 
 [nil, nil, nil], 
 [nil, nil, nil]]

Я нашел решение своей проблемы, вinitialize метод, мне просто нужно назначить значение по умолчанию сетки, как это:

def initialize(grid = [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]])
  @grid = grid
end

Тогдаplace_mark метод работает просто отлично.

Итак, мой вопрос: как отличаются два разных объявления массива, которые заставляют их так себя вести?

Ответы на вопрос(1)

Ваш ответ на вопрос