ruby的object_id方法是否指向内存位置?

时间:2009-03-19 22:39:15

标签: ruby

或者这个方法只是表明每个对象都有一个唯一的整数吗?

5 个答案:

答案 0 :(得分:6)

它是许多参数,值,对象类型,内存中的位置的组合 更多内容可以阅读here

答案 1 :(得分:4)

它不是对内存位置的直接引用,“编码”特定于特定的Ruby实现。如果您可以阅读C代码,您可能会发现在Ruby 1.8.6源代码中查看rb_obj_id中的id2refgc.c方法是有益的。您还可以在Ruby Hacking Guide chapter 2的部分翻译的“VALUE中嵌入的对象”部分中阅读有关“编码”的更多信息。

答案 2 :(得分:3)

值得注意的是,您可以使用以下方法执行对象ID的反向查找:

ObjectSpace._id2ref(object_id)

例如:

ObjectSpace._id2ref(0) #=> false
ObjectSpace._id2ref(1) #=> 0
ObjectSpace._id2ref(2) #=> true
ObjectSpace._id2ref(3) #=> 1
ObjectSpace._id2ref(4) #=> nil

答案 3 :(得分:1)

嗯,这取决于你的意思“红宝石”;)在jruby中,它只是一个独特的整数,据我所知。

此外,数字之类的东西不是内存位置。我忘记了所有的细节,我相信有人会把它们交给你。

irb(main):020:0> 1.object_id
=> 3 
irb(main):021:0> (2-1).object_id
=> 3

答案 4 :(得分:1)

在“普通”红宝石(MRI 1.8.x和1.9.x)中,它只是一个独特的值。

IronRuby也是如此