From: matz@... (Yukihiro Matsumoto) Date: 1996-10-31T16:00:05+09:00 Subject: [ruby-list:980] Re: == and hash[Rational] まつもと ゆきひろです. In message "[ruby-list:978] == and hash[Rational]" on 96/10/31, Keiju ISHITSUKA writes: | |けいじゅ@SHLジャパンです. | |Rationalがらみで気になることを発見しました. | |ドキュメントによると, | == で真になるもの同士は同じハッシュ値を持たねばならないとなっています |が, | |1 == 1 --> TRUE |1.0 == 1 --> TRUE | |ですが, hash値は 1と45637 になっています. これは問題ではないでしょうか? こういう本格的なものを開発しはじめてくださるといろいろと見落 としが見つかりますね.ありがたいことです. さて,==が成立する場合hashが同じ値を持たねばならないという制 限はHashクラスのためなのはご存知だと思います.で,問題は hash={} hash[1.0] = 2 として格納したものが print hash[1] で取り出せる必要があるか,ということですね.現在は「取り出せ る必要は無い」として違うハッシュ値を与えています.ということ はドキュメントの記述の方に問題があると思います. とはいえ,正確を期して,数値のように違うオブジェクトに対して 便宜上 == を成立させているような場合にはhash値を等しくする必 要は無いなどと細かく書くとかえってわかりにくくなるようにおも いますし.なにか分かりやすい表現はないものでしょうか. |質問: |Rationalには == が再定義され正しく動作しているのですが, Comparableから |継承しているのでしょうか??? NumericがComparableをincludeしています. |1 == Rational(1, 1) --> TRUE | |この場合, Ratinalのハッシュ値は1.hashと同じであるべきなのでしょうか?? 必要ないと思いますけどねえ. まつもと ゆきひろ /:|)