まつもと ゆきひろです.

In message "[ruby-list:1658] Re: [Q] Use of '==', 'eql?' and 'hash'"
    on 97/01/09, sinara / blade.nagaokaut.ac.jp <sinara / blade.nagaokaut.ac.jp> writes:
|
|原です。

|そんな方法があったとは!

こういうやりかた(まず自分のメソッドで絞り込みやデータの取り
出しを行い,残りは相手のメソッドに任せてしまうようなやりかた)
をダブルディスパッチと呼びます.オブジェクト指向では良く使わ
れるやり方なので覚えておくと便利でしょう.

|つまり Hash のキーの一致は
|
|   a.hash == b.hash and a.eql? b
|
|で見ているのですね。hash の値で候補をしぼり、eql? で確認する
|という感じでしょうか?

そうです.もちろん適当に分散していないと効率が良くないのです
が.極端な話,全部のオブジェクトに同じ値を返すhashの実装とい
うのもありえるのですが,この場合,線形検索と同じかそれ以上に
効率が悪くなるでしょう.

                                まつもと ゆきひろ /:|)