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