私は、その場合には、オブジェクトO関数呼び出しo.is_equal(O)が偽を与えるために知っていただきたいと思います。
私は、この関数は、異なっ=から、単にオブジェクトのアドレスを比較するだけでなく、すべての属性の値ではないことを知っています。
この定義に従えば、私たちは同じオブジェクトを比較しているので、そのような呼び出しが常にをに与えると確信していました。
誰かが私の考えで間違っているものを私に説明できる場合、私は本当にいただければ幸いです。
私は、その場合には、オブジェクトO関数呼び出しo.is_equal(O)が偽を与えるために知っていただきたいと思います。
私は、この関数は、異なっ=から、単にオブジェクトのアドレスを比較するだけでなく、すべての属性の値ではないことを知っています。
この定義に従えば、私たちは同じオブジェクトを比較しているので、そのような呼び出しが常にをに与えると確信していました。
誰かが私の考えで間違っているものを私に説明できる場合、私は本当にいただければ幸いです。
フィーチャー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
を返すこともできますが、これにより機能の契約が破綻する可能性があります。
は、現実の生活の中での比較は、通常o1
とo2
の値に応じて、True
またはFalse
できo1.is_equal (o2)
です。
おかげで答えのための多くは、ポイントはエッフェルについてバートランド・メイヤーの古い試験では、文の「オブジェクトoの場合は、機能呼び出しo.is_equal(O)常にTrueを返しますが、」偽であるということです。 – DevX10
これは、文が偽である場合があるはずですが、あなたが来たのと同じ解決策に来たので、それが何であるかはわかりません。 – DevX10
@Ergo:もしそれが本当に古いのであれば、現在のバージョンのような事後条件がなく、 'False'を返す' is_equal'やフードの下のオブジェクトをto.changeに再定義することができます。 –