我有
def initialize
@board = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
end
我以为我å¯ä»¥ç¼©çŸå®ƒï¼š
def initialize
@board=[ [0] * 4] * 4
end
它们看起æ¥ä¸€æ ·ï¼Œä½†åªæœ‰åŽè€…,我得到一个错误,如:
10) vertical turn can add 1 to an existing column of 2 with 1's at the ends [20/18949]
Failure/Error: expect([game.board[0][2], game.board[1][2], game.board[2][2], game.board[3][2]]).to eq [0,1,0,0]
expected: [0, 1, 0, 0]
got: [1, 1, 0, 1]
(compared using ==)
# ./spec/game_spec.rb:132:in `block (2 levels) in <top (required)>'
ç”案 0 :(得分:5)
请å°è¯•ä½¿ç”¨æ¤å·¥ä½œå’Œéžå·¥ä½œä»£ç :
@board.map { |x| x.object_id }
ä½ ä¼šå‘现差异。å‘ç”Ÿé”™è¯¯æ˜¯å› ä¸ºæ‰€æœ‰å†…éƒ¨æ•°ç»„éƒ½æ˜¯åŒä¸€ä¸ªå¯¹è±¡ã€‚
问题在于
[ [0] * 4 ] * 4
是一个包å«ç›¸åŒæ•°ç»„四次的数组。
虽然
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
是一个包å«å››ä¸ªä¸åŒArray对象的Array。
å½“ä½ .inspect
时,它们看起æ¥æ˜¯ä¸€æ ·çš„ï¼Œå› ä¸ºRuby没有å‘ä½ æ˜¾ç¤ºå¯¹è±¡ID。
实现0-ed数组的å¦ä¸€ç§æ–¹æ³•å¯èƒ½æ˜¯ï¼š
Array.new(4) { Array.new(4) {0} }
或者,如果您åªå¤„ç†4x4整数,那么您å¯ä»¥æŸ¥çœ‹narray
库,它没有这些问题,而且批é‡æ“作也éžå¸¸å¿«ã€‚