ObjectSpace._id2ref
返回的以下两种错误有什么区别?
0x... is recycled object (RangeError)
0x... is not id value (RangeError)
答案 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的编码”。