原です。

> まつもと ゆきひろです.

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

勉強になるなあ。


> |つまり Hash のキーの一致は
> |
> |   a.hash == b.hash and a.eql? b
> |
> |で見ているのですね。hash の値で候補をしぼり、eql? で確認する
> |という感じでしょうか?
> 
> そうです.もちろん適当に分散していないと効率が良くないのです
> が.極端な話,全部のオブジェクトに同じ値を返すhashの実装とい
> うのもありえるのですが,この場合,線形検索と同じかそれ以上に
> 効率が悪くなるでしょう.

大変よくわかりました。このメカニズムはなかなか楽しいですね。

hash とる値は Bignum でしょうか?どうも

  def hash
    @a.hash ^ @b.hash
  end

として Segmentation fault がしばしば起こっています。再現性の
あるスクリプトをいま探しています。