ふなばです。

At 1999-09-07T03:22:24+0900 (2451428.26556JD),
matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

matz> とも思ったのですが、それはまた別のような気がしてきました。た
matz> とえばStringのサブクラスを作ってハッシュのキーにした場合、
matz> hashの値が等しくeql?が成立するならば、それは文字列と同様に振
matz> 舞うべきだと思います。そういう意味でクラスが等しいことは必須
matz> ではない、と。

eql? の役目は、ハッシュのキーに供したさいに、等価と見なしてよいか検査
するためのものらしいので、それはそうだなと思いますです。

一般的には必須でないけど、Date では == は比較対象に数値をとれるので、
eql? を == をつかって実装する際には、あのような検査をしようと思います。

ちゃんと確認してないんですけど、

a.hash == a.hash # => true
hash = {}
hash[a] = 0
hash[b] = 1

としたら、b.eql?(a) となるんじゃないかと思うんですが、a が先に登録され
るのは、偶然にすぎないわけで、a.eql?(b) となることもあるはずですよね。
これで違いがでる可能性はあるんですよね、ちょっと心配。

ふなば ただよし