【问题标题】:Why does 1.object_id always return 3 in Ruby 2.5.1? [duplicate]为什么 1.object_id 在 Ruby 2.5.1 中总是返回 3? [复制]
【发布时间】:2018-09-07 10:01:07
【问题描述】:

好吧,我可以迭代 3 到 101 并使用以下方法仅选择赔率:

(1..50).to_a.map(&:object_id)

(1..50).map(&:object_id)

甚至像这样:

(1..50).to_a.each do |c| p c.object_id end

而且做同样的事情的方法还在继续......

如果“A”可以有任何整数类的对象ID,并且看起来很随机,那么为什么一个数字有固定的?

【问题讨论】:

  • 简短的回答是:因为我的1和你的1是一样的。只有一个1。每次您引用数字1 时,它总是同一个对象。另一方面,字符串(在 ruby​​ 中)是可变的;如果您在不同的地方创建两个不同(相同)的字符串,那么它们就是不同的对象。你可以改变一个,而不改变另一个。因此,它们必须有不同的object_ids。

标签: ruby


【解决方案1】:

对象ID 是根据对象value 加上一些附加信息计算得出的。从该计算中,您可以得出您在示例中看到的值。

有关详细信息,请阅读这些 SO 帖子:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2023-01-16
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    相关资源
    最近更新 更多