我完成了tic tac toe的胸肌,並且一直致力於改進我的電腦播放器。這需要從舊板對象創建新的板對象的副本。我無法創建電路板的深層副本。對象的深度複製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只是複製對象它不會工作,但我不明白爲什麼我當前的實現不起作用。我應該存儲當前對象的網格,然後使用同一個網格創建一個新對象。有什麼想法嗎?