需要使我的程序中的某些 Ruby 字符串不可变。什么是最好的解决方案?在类上写一个包装器String
?
该freeze
方法对我不起作用。我看到这freeze
不会让你解冻对象。
以下是我的情况:我有一个将字符串传递给回调的类。该字符串恰好是该类的一个实例变量,并且可能很大。我不希望回调修改它,但仍然允许类随意修改它。
以下是我的情况:我有一个将字符串传递给回调的类。
将字符串的副本传递给回调工作吗?
该字符串恰好是该类的一个实例变量,并且可能很大。我不希望回调修改它,但仍然允许类随意修改它。
如果您担心字符串的大小,那么使用 String#dup 会有所帮助。它将创建一个具有 distinct 的新对象,object_id
但不会复制字符串的内容,除非新字符串(或原始字符串)被修改。这称为“写入时复制”,并在Seeing double: how Ruby share string values中进行了描述。
调用#freeze
字符串。请参阅:http ://ruby-doc.org/core-1.9.3/Object.html#method-i-freeze