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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage