【发布时间】:2013-01-16 05:06:44
【问题描述】:
在 Ruby 中,String 或 Array(等)对象被“冻结”意味着什么?如何/在哪里设置或修改此属性?
【问题讨论】:
在 Ruby 中,String 或 Array(等)对象被“冻结”意味着什么?如何/在哪里设置或修改此属性?
【问题讨论】:
这意味着你不能修改它。您通过freeze 方法设置它。
s = "a"
concat 修改字符串实例。
s.concat("b")
# => "ab"
当你冻结字符串时:
s.freeze
那么,你不能再申请concat了。
s.concat("c")
# => RuntimeError: can't modify frozen String
但是,您可以应用不修改接收器的方法:
s + "c"
# => "abc"
【讨论】:
防止对 obj 的进一步修改。如果尝试修改,将引发 RuntimeError。无法解冻冻结的对象。另请参阅 Object#frozen?。
a = [ "a", "b", "c" ]
a.freeze
a << "z"
产生:
prog.rb:3:in `<<': can't modify frozen array (RuntimeError)
from prog.rb:3
【讨论】: