[#39863] forループの速度 — Masahiro Sato <msato@...>

15 messages 2004/07/20

[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>

大谷と申します。

31 messages 2004/07/20
[#39886] Re: イテレータとfor文 — Tietew <tietew-ml-ruby-list@...> 2004/07/21

[ruby-list:39824] Re: (要素がString, Fixnum 以外の)配列の集合演算

From: Hiroshi Takagi <gollum@...>
Date: 2004-07-05 15:32:53 UTC
List: ruby-list #39824
高木です。

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>



In This Thread