2017-09-16 88 views
0
a = %W(a b c).each {|a| a << "\n"} 
a.each {|a| print a} 

顯示器的區別:
一個
b
Ç紅寶石: 「+ =」 和 「<<」 絃樂

a = %W(a b c).each {|a| a += "\n"} 
a.each {|a| print a} 

dispays:ABC

其原因是什麼區別?

+0

你到目前爲止做了哪些研究?你有沒有試過打印'a.inspect'? –

回答

2

請注意,<<是一個in-place修飾符,即它改變了字符串包含的內容。 +=是組合加法賦值運算符,用於更改變量指向的內容,但不會更改原始對象。

比較:

a = "a" 
a.object_id 
# => ...4680 

a += "b" 
a.object_id 
# => ...3960 

a現在指向一個完全不同的對象。當您在each循環中執行此操作時,您不會更改存儲在數組中的原始對象,而是正在改變僅存在於該循環迭代範圍內的變量。

往前一步:

a << "c" 
a.object_id 
# => ...3960 

它仍然是同一個對象。字符串,像很多容器類型的對象,如數組和哈希,通常有一些方法可以進行就地修改,其他方法可以返回副本。 String#subString#sub!之間有很大的差異。