2
ObjectSpace._id2ref
返回的以下兩種錯誤有什麼區別?來自`ObjectSpace._id2ref`的錯誤
0x... is recycled object (RangeError)
0x... is not id value (RangeError)
ObjectSpace._id2ref
返回的以下兩種錯誤有什麼區別?來自`ObjectSpace._id2ref`的錯誤
0x... is recycled object (RangeError)
0x... is not id value (RangeError)
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的編碼」。
我理解你的解釋,但不理解你的例子。爲什麼RangeError消息顯示與前一個不同的object_id? – sawa
啊,是的,我忽略了,對不起。相應更新。 –