Actions
Backport #2338
closed大きなFixnumを値にもつHash#hashが呼び出しごとに変わる
Status:
Closed
Assignee:
Description
=begin
Yuguiです。1.9.1でも再現を確認しましたのでチケットをコピーします。
--
大きなFixnumを値にもつHashについてHash#hashの値が呼び出しごとに変わります。
% ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10]
% irb --simple-prompt
h = {:a => 261}
=> {:a=>2305843009213693952}
h.hash
=> 3933384
h.hash
=> 4179968
(261).class
=> Fixnum
(2**62).class
=> Bignum
関連してだと思うのですが
h1.eql? h2 # => true
であるにもかかわらず
h1.hash == h2.hash # => false
となることがあります。
https://trac.macports.org/ticket/22361
% irb --simple-prompt
{:a => 261}.eql?({:a => 261})
=> true
{:a => 261}.hash == {:a => 261}.hash
=> false
簡単に試してみたところ、値が261から262-1の範囲で起きるようです。
32bitの場合は229から230-1の範囲で同様の現象が発生します。
=end
Actions
Like0
Like0Like0Like0