在 Ruby 中,String
或Array
(等)对象被“冻结”是什么意思?如何/在哪里设置或修改此属性?
问问题
5010 次
2 回答
8
这意味着你不能修改它。你通过freeze
方法设置它。
s = "a"
concat
修改字符串实例。
s.concat("b")
# => "ab"
当您冻结字符串时:
s.freeze
那么,你就不能再申请concat
了。
s.concat("c")
# => RuntimeError: can't modify frozen String
但是,您可以应用不修改接收器的方法:
s + "c"
# => "abc"
于 2013-01-16T05:10:49.813 回答
2
防止对 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
于 2013-01-16T05:12:55.360 回答