高木です。

On Mon, 5 Jul 2004 17:56:07 +0900
卜部昌平 <s-urabe / par.odn.ne.jp> wrote:

> eql? を再定義すればいいのではないでしょうか。
> ただし hash も一緒に再定義する必要があるかもしれません。

たしかに eql? だけではだめでした。
hash も定義したら、期待どおりになりました。

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Object#hash

にある、
----------------------------------------------------------------------
A.eql?(B) が成立する時は必ず A.hash == B.hash も成立しなければいけません。
eql?を再定義した時には必ずこちらも合わせて再定義してください。
----------------------------------------------------------------------
ということでしょうか。

ありがとうございました。

>          def eql?(other)
>            @attr1.eql?(other.attr1) && @attr2.eql?(other.attr2)
>          end
>          def hash
>            @attr1.hash + @attr2.hash
>          end

def hash の方は、いろいろな定義ができると思いますが、
def eql?(other) の方は、いつもこういうパターンになりますね。

うう、この二つがMix in できるような方法はないものか...

-- 
Hiroshi Takagi <gollum / hi-net.zaq.ne.jp>