加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使Ruby字符串不可变

发布时间:2020-12-17 04:05:00 所属栏目:百科 来源:网络整理
导读:需要在我的程序中使某些 Ruby字符串成为不可变的.什么是最好的解决方案?在String类上编写包装器? 冻结方法对我不起作用.我看到冻结不允许你解冻对象. 以下是我的情况:我有一个类将字符串传递给回调.该字符串恰好是类的实例变量,可能很大.我不希望回调修改
需要在我的程序中使某些 Ruby字符串成为不可变的.什么是最好的解决方案?在String类上编写包装器?

冻结方法对我不起作用.我看到冻结不允许你解冻对象.

以下是我的情况:我有一个类将字符串传递给回调.该字符串恰好是类的实例变量,可能很大.我不希望回调修改它,但仍然允许类随意修改它.

解决方法

Following is my situation: I have a class that passes a string to a
callback.

将字符串的副本传递给回调工作?

This string happens to be an instance variable of the class
and can be potentially large. I don’t want the callback to modify it,
but still allow the class to modify it at will.

如果你担心字符串的大小,那么使用String#dup会有所帮助.它将创建一个具有不同object_id的新对象,但不会复制该字符串的内容,除非新字符串(或原始字符串)被修改.这称为“写入时复制”,并在Seeing double: how Ruby shares string values中描述.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读