Ruby 2D Array Zuordnung
So habe ich ein Tic-Tac-Toeboard
Klasse. Siehe unten
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
Wenn ich das @ anruplace_mark
-Methode und versucht, einem Element im 2D-Array ein Symbol zuzuweisen, wird die gesamte Spalte zugewiesen.
board = Board.new
board.place_mark([0,0], :x)
Würde zu @ führ
[[:X, nil, nil],
[:X, nil, nil],
[:X, nil, nil]]
Wo das gewünschte Ergebnis ist
[[:X , nil, nil],
[nil, nil, nil],
[nil, nil, nil]]
Ich habe eine Lösung für mein Problem gefunden, in derinitialize
-Methode, ich muss nur den Standardwert des Rasters wie folgt zuweisen:
def initialize(grid = [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]])
@grid = grid
end
Dann ist dieplace_mark
Methode funktioniert gut.
Also meine Frage ist, wie unterscheiden sich die beiden verschiedenen Array-Deklarationen, die sie dazu bringen würden, sich so zu verhalten?