原です。

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.)