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"
Run Code Online (Sandbox Code Playgroud)
到现在为止,两个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"
Run Code Online (Sandbox Code Playgroud)
但是对于一个frozen字符串,从中可以清楚地看到差异IRB,<<并且+表现不像他们应该的那样.谁能告诉我这个的原因?
他们正在做的正是他们应该是什么.<< 修改它被调用的字符串,而+更接近str.dup << arg.此行为是已定义的文档标准.