或者这个方法只是表明每个对象都有一个唯一的整数吗?
答案 0 :(得分:6)
它是许多参数,值,对象类型,内存中的位置的组合 更多内容可以阅读here
答案 1 :(得分:4)
它不是对内存位置的直接引用,“编码”特定于特定的Ruby实现。如果您可以阅读C代码,您可能会发现在Ruby 1.8.6源代码中查看rb_obj_id
中的id2ref
和gc.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也是如此