Ruby中的冻结对象

时间:2013-01-16 05:06:44

标签: ruby arrays string

在Ruby中,StringArray(等)对象为'冻结'意味着什么?设置或修改此属性的方式/位置?

2 个答案:

答案 0 :(得分:8)

这意味着您无法修改它。您可以通过freeze方法设置它。

s = "a"

concat修改字符串实例。

s.concat("b")
# => "ab"

冻结字符串时:

s.freeze

然后,您无法再申请concat

s.concat("c")
# => RuntimeError: can't modify frozen String

但是,您可以应用不修改接收器的方法:

s + "c"
# => "abc"

答案 1 :(得分: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

Doco