使Ruby字符串不可变
需要使程序中的某些Ruby字符串不可变。最好的解决方案是什么?在使Ruby字符串不可变,ruby,string,Ruby,String,需要使程序中的某些Ruby字符串不可变。最好的解决方案是什么?在String类上编写包装器 freeze方法对我不起作用。我看到freeze不允许您解冻对象 下面是我的情况:我有一个类将字符串传递给回调。该字符串恰好是该类的实例变量,可能很大。我不希望回调修改它,但仍然允许类随意修改它。对字符串调用#冻结。见: 下面是我的情况:我有一个类将字符串传递给 回拨 将字符串的副本传递给回调是否有效 此字符串恰好是该类的实例变量 而且可能很大。我不想回调修改它, 但是仍然允许类随意修改它 如果您担心字符
String
类上编写包装器
freeze
方法对我不起作用。我看到freeze
不允许您解冻对象
下面是我的情况:我有一个类将字符串传递给回调。该字符串恰好是该类的实例变量,可能很大。我不希望回调修改它,但仍然允许类随意修改它。对字符串调用#冻结。见:
下面是我的情况:我有一个类将字符串传递给
回拨
将字符串的副本传递给回调是否有效
此字符串恰好是该类的实例变量
而且可能很大。我不想回调修改它,
但是仍然允许类随意修改它
如果您担心字符串的大小,那么使用string#dup会有所帮助。它将创建一个新对象,该对象具有不同的对象id
,但除非修改新字符串(或原始字符串),否则不会复制该字符串的内容。这称为“写下时复制”,如中所述。谢谢,但这在我的情况下不起作用。请参阅对我的原始帖子的编辑。对这个答案+1,因为复制冻结的字符串总是可能的,结果将是一个可变的副本。听起来你不想使字符串不可变,而是想限制它的变异能力。@zettetic:同意。这正是我想要的。使用dup
听起来很完美。我不想修改baseString
类,因为它可能会给以后的调试带来麻烦。谢谢。String#dup非常适合上述场景。