2016-08-20 10 views
0

エッフェルis_equal()関数

私は、その場合には、オブジェクトO関数呼び出しo.is_equal(O)を与えるために知っていただきたいと思います。

私は、この関数は、異なっ=から、単にオブジェクトのアドレスを比較するだけでなく、すべての属性の値ではないことを知っています。

この定義に従えば、私たちは同じオブジェクトを比較しているので、そのような呼び出しが常にに与えると確信していました。

誰かが私の考えで間違っているものを私に説明できる場合、私は本当にいただければ幸いです。

答えて

1

フィーチャーis_equalの起源はANYであり、COMPARABLEではありません。クラスCOMPARABLEは、機能を再定義し、不平等の面で平等のプロパティを指定する(または、クエリis_lessの面で、より正確には)事後条件trichotomyを追加します。何が起こっているのか理解するために、起源を見てみましょう。

クラスANYは機能is_equalは、事後条件、我々は新しい不変を導き出すことができます(でもstandard_is_equalが何であるかを知らなくても)2を組み合わせる

consistent: standard_is_equal (other) implies Result 

を持って同時に不変

reflexive_equality: standard_is_equal (Current) 

を持って

new_reflexive_equality: is_equal (Current) 

はすべてのオブジェクトに対して有効である必要があります。したがって、式のoが常に同じオブジェクトを生成すると(たとえば、それが変数であれば、毎回異なるオブジェクトを返す関数ではない)、o.is_equal (o)は常にTrueを生成する必要があります。もちろん、is_equalを再定義してFalseを返すこともできますが、これにより機能の契約が破綻する可能性があります。

は、現実の生活の中での比較は、通常o1o2の値に応じて、TrueまたはFalseできo1.is_equal (o2)です。

+0

おかげで答えのための多くは、ポイントはエッフェルについてバートランド・メイヤーの古い試験では、文の「オブジェクトoの場合は、機能呼び出しo.is_equal(O)常にTrueを返しますが、」偽であるということです。 – DevX10

+0

これは、文が偽である場合があるはずですが、あなたが来たのと同じ解決策に来たので、それが何であるかはわかりません。 – DevX10

+0

@Ergo:もしそれが本当に古いのであれば、現在のバージョンのような事後条件がなく、 'False'を返す' is_equal'やフードの下のオブジェクトをto.changeに再定義することができます。 –

関連する問題