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
其原因是什麼區別?
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
其原因是什麼區別?
請注意,<<
是一個in-place修飾符,即它改變了字符串包含的內容。 +=
是組合加法賦值運算符,用於更改變量指向的內容,但不會更改原始對象。
比較:
a = "a"
a.object_id
# => ...4680
a += "b"
a.object_id
# => ...3960
a
現在指向一個完全不同的對象。當您在each
循環中執行此操作時,您不會更改存儲在數組中的原始對象,而是正在改變僅存在於該循環迭代範圍內的變量。
往前一步:
a << "c"
a.object_id
# => ...3960
它仍然是同一個對象。字符串,像很多容器類型的對象,如數組和哈希,通常有一些方法可以進行就地修改,其他方法可以返回副本。 String#sub
和String#sub!
之間有很大的差異。
你到目前爲止做了哪些研究?你有沒有試過打印'a.inspect'? –