来自`ObjectSpace._id2ref`的错误

时间:2012-11-22 08:28:50

标签: ruby ruby-1.9 objectid

ObjectSpace._id2ref返回的以下两种错误有什么区别?

0x... is recycled object (RangeError)

0x... is not id value (RangeError)

1 个答案:

答案 0 :(得分:2)

not id value表示从未有过具有该ID的对象。

recycled object表示曾经有一个带有该ID的对象,但它已被垃圾收集。

Ruby 1.9.3 / Ubuntu上的演示:

x = Object.new
id = x.object_id

puts "0x%x" % id
# => 0x4aef5e8

puts ObjectSpace._id2ref id
# => #<Object:0x95debd0>

x = nil

puts ObjectSpace._id2ref id
# => #<Object:0x95debd0>

GC.start

puts ObjectSpace._id2ref id
# => 0x4aef5e8 is recycled object (RangeError)

请注意,Object#to_s中的数字 object_id - 根据docs它是“对象ID的编码”。