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
метод работает просто отлично.
Итак, мой вопрос: как отличаются два разных объявления массива, которые заставляют их так себя вести?