A Day in the Life

Ruby の Object#hash

Ruby の Object#hash

nil.hash したら 4 だったので調べてみた。

$ ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]

puts ObjectSpace._id2ref(0) #=> false
puts ObjectSpace._id2ref(1) #=> 0
puts ObjectSpace._id2ref(2) #=> true
puts ObjectSpace._id2ref(3) #=> 1
puts ObjectSpace._id2ref(4) #=> nil
puts ObjectSpace._id2ref(5) #=> 2
puts ObjectSpace._id2ref(6) #=> foo.rb:8:in `_id2ref': 0x6 is not id value (RangeError)

5まではあり、6,7,8は RangeError で追記・7は3でした

puts ObjectSpace._id2ref(9) #=> 4

になるのが解らない…。

あと jruby 1.4 では結果が違った。

$ jruby --version
jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2010-01-11 6586) (Java HotSpot(TM) Client VM 1.6.0_17) [i386-java]

puts ObjectSpace._id2ref(0) #=> false
puts ObjectSpace._id2ref(1) #=> 0
puts ObjectSpace._id2ref(2) #=> true
puts ObjectSpace._id2ref(3) #=> 1
puts ObjectSpace._id2ref(4) #=> nil
puts ObjectSpace._id2ref(5) #=> 2
puts ObjectSpace._id2ref(6) #=> nil