現時点では、feature の起源is_equal
は classANY
であり、 ではありませんCOMPARABLE
。クラスは機能を再定義し、不等式に関して (または、より正確にはクエリに関して) 等式のプロパティを指定COMPARABLE
する事後条件を追加します。何が起こっているのかを理解するために、起源を見てみましょう。trichotomy
is_less
クラスANY
には不変条件があります
reflexive_equality: standard_is_equal (Current)
同時に機能is_equal
には事後条件があります
consistent: standard_is_equal (other) implies Result
2 つを組み合わせると ( が何であるかを知らなくてもstandard_is_equal
)、新しい不変式を導き出すことができます。
new_reflexive_equality: is_equal (Current)
これは、すべてのオブジェクトに対して有効である必要があります。したがって、式が常に同じオブジェクトを生成するとすぐにo
(たとえば、呼び出しごとに異なるオブジェクトを返す関数ではなく、変数である場合)、o.is_equal (o)
常に を生成する必要がありTrue
ます。もちろん、is_equal
returnを再定義しようとすることはできますFalse
が、これは機能の契約を破ることになります。
実生活では、比較は通常o1.is_equal (o2)
、との値に応じてTrue
またはになります。False
o1
o2