所以我有一個井字棋board
類。見下文:Ruby二維數組賦值
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
方法工作得很好。
所以我的問題是如何使兩個不同的數組聲明不同,使他們表現這種方式?
Ruby中沒有多維數組(除非您從標準庫中計算Matrix),只需要數組的陣列,數組的陣列等。 –