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