From: Tetsuo Sakaguchi Date: 2008-08-30T17:44:19+09:00 Subject: [ruby-list:45442] Re: assert_equalの挙動について 阪口と申します。多分識者?からもフォローがあると思いますが、 In message <20080830171137.d8183aad.ruby@i-mail.jp> 2008-08-30T17:09+0900, Akira Hayakawa wrote: > 納得しました。==は鬼門なんですね。 そうではなくて、リファレンスマニュアルの組み込みクラスObjectの==の 説明にある通り、クラスを定義する時にそのクラスのオブジェクトの 性質に合わせた「等しさ」を定義する==メソッドを定義すべきだと言う ことです。 http://www.ruby-lang.org/ja/man/html/Object.html#self.3d.3d 「同一オブジェクトである」という比較は全クラス共通に実装 できますが、「等しい」というのはクラス毎に意味が変わるので、 オブジェクト指向のプログラミング言語ではどれも同様です。 > equalが、「2つのオブジェクトのすべての属性がすべてequalなら正しい」という感じの仕様なら使い勝手が良いのですが、 > こういう再帰は実装するのは不可能なんでしょうか? 原理的には不可能ではないと思います。ただ属性(というかインスタンス変数の 値ですね)が環状に参照する可能性を考慮すると、性能が厳しいでしょうね。 (そういう場合に「止まらなくても良い」と言うメソッドなら簡単に定義できますが:-) PS. この辺のことは今年50周年のLispで学び、Smalltalk-80で実感させられました。 -- 阪口哲男@図書館情報メディア研究科.大学院.筑波大学 Tetsuo SAKAGUCHI. Graduate School of Library, Information and Media Studies University of Tsukuba, JAPAN.