ruby – =运算符似乎修改冻结的字符串
发布时间:2020-12-16 20:19:18 所属栏目:百科 来源:网络整理
导读:我使用红宝石冻结方法.就冻结的定义而言,它冻结了被调用对象的值.我们无法修改该对象的值.我必须完成同样的任务,我有一个对象,我正在执行以下代码 a = "Test"a.freezea += "this string"puts a 输出如下: Test this string[Finished in 0.0s] 为什么要修改
我使用红宝石冻结方法.就冻结的定义而言,它冻结了被调用对象的值.我们无法修改该对象的值.我必须完成同样的任务,我有一个对象,我正在执行以下代码
a = "Test" a.freeze a += "this string" puts a 输出如下: Test this string [Finished in 0.0s] 为什么要修改我的冻结字符串? 解决方法
没有什么是修改你的冻结字符串
您正在重新分配一个新的字符串 a += "this string" 在Ruby中内部是一样的 a = a + "this string" 当您在Ruby中添加两个String对象时,它将创建一个包含结果的新String(对于支持它的大多数对象,这是操作符的正常行为).这使原来的“测试”和“这个字符串”的值保持不变.原始的,冻结的字符串(包含“测试”)将保留在内存中,直到它被垃圾回收为止.它可以收集,因为你已经丢失了所有的引用. 如果您尝试像这样修改对象: a << "this string" 那么你应该看到一个错误消息RuntimeError:不能修改冻结的字符串 基本上,你已经将一个局部变量与它所指向的String对象混淆了.可以随时重新分配局部变量,而不受Ruby存储的对象的影响.您可以通过在a = …行之前和之后检查a.object_id来验证您的情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |