7

在 Ruby 中,StringArray(等)对象被“冻结”是什么意思?如何/在哪里设置或修改此属性?

4

2 回答 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 回答