ふなばです。

At 1999-09-03T13:13:59+0900 (2451424.67638JD),
matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

matz> |どこが責任持つかは別として、eql? において、上のような検査が必要なことは
matz> |確かなんですよね。とすれば、date[23]? でも、そのような変更をしなければ
matz> |いけないのかな。

matz> このような型の検査は「必要」ではないはずです。ただパフォーマ
matz> ンスのための刈り込みをしたいと思っただけのはずです。というわ
matz> けで、そうなってないからという理由で動かないのは、やはり
matz> Comparable#== の定義に問題ありでしょう。もう直しちゃいました。

んー、Comparable#== はわかるのですが、型の検査がないなら、
eql? は == と同じことになってしまうのではないですか。

この場合、直接的には、もう一方のオブジェクト (date3 ですが) が、
coerce を持っていないから、エラーになったわけで、もし持っていたら、
同じと判断される可能性があるわけですよね。

そういうもんかというと、そうでもない、Rational(1,1) == 1 は成り立っても、
Ratioanl(1,1).eql?(1) はならない、それは型が違うからですよね。

ふなば ただよし