2012-11-22 5 views
2

ObjectSpace._id2ref이 반환하는 다음 두 가지 오류의 차이점은 무엇입니까?`ObjectSpace._id2ref`의 오류

0x... is recycled object (RangeError) 

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

답변

2

not id value은 해당 ID를 가진 개체가 없었 음을 의미합니다.

recycled object은이 ID를 가진 객체가 한 번 존재했음을 의미하지만 가비지 수집되었습니다. 루비 1.9.3/우분투

데모 : Object#to_s의 수가 하지object_id 것을

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) 

주 - "오브젝트 ID의 부호화"인 docs 방법.

+0

귀하의 설명을 이해하지만 귀하의 예를 이해하지 못합니다. RangeError 메시지가 이전의 object_id와 다른 object_id를 표시하는 이유는 무엇입니까? – sawa

+0

아, 그래, 나는 그것을 간과했다, 미안. 그에 따라 업데이트되었습니다. –