在下面的代碼片段中,數組deck
應該等於[6,9,5,6,5,1,2]
,因爲Ruby通過引用傳遞數組。方法調用後,卡組的值不會改變。這是爲什麼?爲什麼我不能修改方法中數組的值?
def count_cut!(deck)
s1, s2 = deck[0, deck.last], deck[deck.last..-2]
deck = s2 + s1 + [deck.last]
end
deck = [5, 1, 6, 9, 5, 6, 2]
count_cut!(deck)
p deck
我正在使用Ruby 1.9.2-p180。
那麼爲什麼甲板是方法範圍內的局部變量時,deck.replace會突變甲板?或者僅僅是一種特殊情況? – RaouL 2011-05-11 16:02:41
當你調用'deck = s2 + s1 + [deck.last]'你創建一個新的對象。你可以測試它,如果你把'deck.object_id'放在方法中後,並在'count_cut!(deck)後面' – 2011-05-11 16:14:27
如果你想這樣想的話,賦值是一種特殊情況。所有的值都通過Ruby中的引用傳遞,所以任何修改實例的方法都會修改它。但分配會將該變量更改爲指向新實例。 – 2011-05-11 17:19:13