2012-11-22 90 views

回答

2

not id value意味着從未有過具有該ID的對象。

recycled object意味着曾經有一個具有該ID的對象,但它已被垃圾收集。

演示上紅寶石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的編碼」。

+0

我理解你的解釋,但不理解你的例子。爲什麼RangeError消息顯示與前一個不同的object_id? – sawa

+0

啊,是的,我忽略了,對不起。相應更新。 –