ObjectSpace._id2ref
返される次の 2 種類のエラーの違いは何ですか?
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のエンコード」です。