2

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

0x... is recycled object (RangeError)

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

1 回答 1

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不是- 根据文档它是“对象 id 的编码” 。object_id

于 2012-11-22T12:24:35.440 回答