gpt4 book ai didi

ruby - += 运算符似乎在修改卡住的字符串

转载 作者:数据小太阳 更新时间:2023-10-29 06:32:38 26 4
gpt4 key购买 nike

我正在使用 ruby​​ 卡住方法。就卡住的定义而言,它卡住调用它的对象的值。我们不能在它之后修改那个对象的值。我必须完成相同的任务,我有一个对象并且正在执行以下代码

a = "Test"
a.freeze
a += "this string"
puts a

输出如下:

Test this string
[Finished in 0.0s]

为什么要修改我卡住的字符串?

最佳答案

没有任何东西正在修改你卡住的 String

您正在将 a 重新分配给一个新的 String

a += "this string"

在 Ruby 中与

内部相同
a = a + "this string"

当您在 Ruby 中添加两个 String 对象时,它将创建一个包含结果的新 String(这是 + 运算符在大多数支持它的对象上的正常行为)。这使原始的“测试”和“此字符串”值保持不变。原始的、卡住的字符串(包含“Test”)将保留在内存中,直到被垃圾回收。它可以被收集,因为您已经丢失了对它的所有引用。

如果您尝试像这样就地修改对象:

a << "this string"

然后您应该会看到一条错误消息 RuntimeError: can't modify frozen String

基本上,您混淆了局部变量a 和它指向的String 对象。局部变量可以随时重新赋值,独立于 Ruby 存储的对象。您可以通过检查 a +=... 行前后的 a.object_id 来验证您的情况是否如此。

关于ruby - += 运算符似乎在修改卡住的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41375818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com