irb(main):009:0> a = "good"
=> "good"
irb(main):010:0> a = "good" + "morning"
=> "goodmorning"
irb(main):011:0> a = "good"
=> "good"
irb(main):012:0> a << " morning"
=> "good morning"
直到現在concatenation
運營商工作正常。爲什麼「<<」和「+」與凍結字符串對象的行爲不同?
irb(main):013:0> a = "good"
=> "good"
irb(main):014:0> a.freeze
=> "good"
irb(main):015:0> a.frozen?
=> true
irb(main):016:0> a << " welcome"
RuntimeError: can't modify frozen String
from (irb):16
from /usr/bin/irb:12:in `<main>'
irb(main):017:0> a = a + " welcome"
=> "good welcome"
但是隨着frozen
串差爲IRB
是<<
和+
並不表現爲他們應該清晰可見。有誰能告訴我這個的原因嗎?
我在講凍結的字符串。你能解釋一下原因嗎? – 2013-02-16 18:19:46
@ user2060534:凍結的字符串與自己創建副本,只是沒有被修改本身,並且淺拷貝不會複製凍結的屬性。 – Linuxios 2013-02-16 18:23:30