2013-07-25 102 views
1

請幫忙找到下一個行爲的一些文章。紅寶石指派行爲

a = 'qwer' 
a = b 
b << 'ty' 
puts b # => 'qwerty' 
puts a # => 'qwerty' 

但如果

a = 'qwer' 
a = b 
b = 'ty' 
puts b # => 'ty' 
puts a # => 'qwer' 

我知道爲什麼在這種情況下

我知道,它工作得很好,但我不能找到一個解釋 - 爲什麼這麼

附:

如果適用 - 請給這個主題(或類似的文章的鏈接也許我想念這個更有趣的功能)。

Thn。

+1

[這個答案] [1]可能是你在找什麼。 [1]:http://stackoverflow.com/questions/1872110/is-ruby-pass-by-reference-or-by-value/10974116#10974116 – Yanhao

回答

5

當你

a = b 

你讓變量a保持參照同一個對象變量b。這就是爲什麼當你鍵入:包含在變量a

b << 'ty' 

字符串也將改變 - 這是同樣的String實例。

另一方面,假設您的變量b包含對字符串'qwer'的引用。 如果您有:

a = b 
b = 'ty' 

在第一行分配變量a同一對象爲b。在第二行中,您將一個新的String對象分配給變量b。所以最後,這兩個變量都引用了不同的對象。