gpt4 book ai didi

ruby - 为什么 Ruby 为 "var = var + 1"而不是 "var = var + 0"创建一个新对象?

转载 作者:数据小太阳 更新时间:2023-10-29 07:40:46 25 4
gpt4 key购买 nike

我有这个 Ruby 代码:

var1 = 10
puts var1.object_id
var1 = var1 + 0
puts var1.object_id
var1 = var1 + 1
puts var1.object_id

输出是:

1> 21
2> 21
3> 23

问题:为什么Ruby在添加非零值时会创建一个新对象,而在添加0时却不会?

最佳答案

Ruby 内部在使用 Fixnums 时根本不创建对象。相反,该实现使用“标记”指针,也就是说,如果设置了指针的最低有效位,Ruby 就会理解该指针实际上并不指向对象,而是直接对 Fixnum 的值进行编码。因此,具有相同数值的 Fixnum 将始终由相同的指针值表示。

¹ 我指的是官方 Ruby 解释器 - 其他实现可能会以不同方式处理。

关于ruby - 为什么 Ruby 为 "var = var + 1"而不是 "var = var + 0"创建一个新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061620/

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