原です。
Hash で使われるメソッド hash について質問です。
あるクラス Foo を定義します。
class Foo
def initialize(a, b)
@a, @b = a, b
end
end
ここで、
(1) Foo の == を再定義するとそれに合わせて eql? も再定義
される様に思いますが、それは正しいですか?
#正しいとするとマニュアルには書いてないのはまずいのでは。
さらに、例えば eql? を次の様に再定義します。
class Foo
attr("a")
attr("b")
def eql?(x)
@a == x.a || @b == x.b
end
end
(2)ここで(しかたなく) @a と @b を attr で公開しましたが、
公開しないでこの eql? と同様なものは作れるでしょうか?
(3)eql? を再定義したので hash も再定義すべきですが、
この例ではどのようにすればよいでしょうか?
(4)eql? を再定義したのに hash は再定義しなかった場合、
どういう局面で不具合がありますか?
---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=--
Shin-ichro Hara(Nagaoka Univ.of Tech.)