2

ObjectSpace._id2ref返される次の 2 種類のエラーの違いは何ですか?

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の数値はではないことに注意してくださいobject_id-ドキュメントによると、「オブジェクトIDのエンコード」です。

于 2012-11-22T12:24:35.440 に答える