我试图更好地理解在比较类中定义的函数 is_equal()。
我想知道在哪种情况下,对象 o 函数调用 o.is_equal(o) 给出假
我知道这个功能与 = 不同,不仅可以比较对象的地址,还可以比较所有属性的值。
按照这个定义,我非常确定这样的调用总是会给出 true ,因为我们正在比较同一个对象。
如果有人能解释我的想法有什么不妥,我真的很感激。
答案 0 :(得分:1)
目前,功能is_equal
的来源是课程ANY
,而不是COMPARABLE
。类COMPARABLE
重新定义了该功能,并添加了一个后置条件trichotomy
,它根据不等式(或者,根据查询is_less
更精确地指定了相等的属性)。因此,要了解正在发生的事情,让我们看一下原点。
班级ANY
有一个不变的
reflexive_equality: standard_is_equal (Current)
同时,功能is_equal
具有后置条件
consistent: standard_is_equal (other) implies Result
将两者结合起来(即使不知道什么是standard_is_equal
)我们可以得出一个新的不变量
new_reflexive_equality: is_equal (Current)
应该对每个对象都有效。因此,只要表达式中的o
始终产生相同的对象(例如,如果它是变量,而不是在每次调用时返回不同对象的函数), o.is_equal (o)
应该始终产生True
。当然,可以尝试重新定义is_equal
以返回False
,但这会破坏该功能的合同。
在现实生活中,比较通常为o1.is_equal (o2)
,可以是True
或False
,具体取决于o1
和o2
的值。