3
# pry / irb example #1
"abc".hash
=> -1883761119486508070
"abc".hash
=> -1883761119486508070

# pry / irb example #2
"abc".hash
=> -4309321811150053495
"abc".hash
=> -4309321811150053495

値は特定のhash呼び出しでは一定ですが、呼び出しごとに異なります。なんで?これは設計によるものですか?これは「良いこと」と見なされますか?

私は走っていruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.0.0]ます。

4

1 に答える 1

7

http://patshaughnessy.net/Ruby-Under-a-Microscope-Rough-Draft-May.pdfの23ページによると

Rubyのハッシュ関数が実際にどのように機能するかは次のとおりです... [中略] ...文字列と配列の場合、機能が異なります。この場合、Ruby は文字列内のすべての文字または配列内の要素を実際に繰り返し処理し、累積ハッシュ値を計算します。これにより、ハッシュ値が文字列または配列のインスタンスに対して常に同じであり、その文字列または配列の値が変更された場合に常に変更されることが保証されます。

と:

また、Ruby 1.9 と Ruby 2.0 は、Ruby を再起動するたびに再初期化されるランダムなシード値を使用して MurmurHash を初期化します。これは、Ruby を停止して再起動すると、同じ入力データに対して異なるハッシュ値が得られることを意味します。また、これを自分で試してみると、上記とは異なる値が得られることも意味します。ただし、ハッシュ値は同じ Ruby プロセス内では常に同じになります。

于 2012-08-29T06:26:48.507 に答える