私はtic tacのつま先のペックを終了し、私のコンピュータプレーヤーの改善に取り組んでいました。これは、古いボードオブジェクトから新しいボードオブジェクトのコピーを作成する必要があります。私はボードの深いコピーを作成することに問題があります。ここでオブジェクトのディープコピーRuby
は、問題のコードです:
Class Board
attr_accessor :grid
def initialize(grid = Array.new(3){ Array.new(3)})
@grid = grid
end
def place_mark(cords, sym)
self[cords] = sym
@grid
end
def [](pos)
row, col = pos
@grid[row][col]
end
def []=(pos, mark)
row, col = pos
@grid[row][col] = mark
end
def new_state
grid = @grid.dup
Board.new(grid)
end
end
board = Board.new
new_state = board.new_state # ==> A different object
new_state.place_mark([0,0], :X) # ==> Object with x placed at 0,0
board # ==> Object with x placed at 0,0
さて、私はNEW_STATEを実装し、それはまた、それはから複製された状態にマークを置きNEW_STATEにマークを配置するとき。
オブジェクトを複製するだけでnew_stateを設定すると、なぜ私の現在の実装がうまくいかないのか分かりません。私は、現在のオブジェクトのグリッドを格納して、同じグリッドを持つ新しいオブジェクトを作成する必要があります。何かご意見は?