来自“ObjectSpace._id2ref”的错误



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

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

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 - 根据文档,它是"对象 ID 的编码"。

相关内容

  • 没有找到相关文章

最新更新