为什么PartialEq返回一个布尔值,当PartialOrd更细微并返回Option<Ordering>时?

这似乎是不对称和基本的,所以我想了解这个的推理,为什么是PartialOrd定义partial_cmp,返回Option<Ordering>

fn partial_cmp(&self, other: &Rhs) -> Option<Ordering> {}

PartialEq定义eq返回bool

fn eq(&self, other: &Rhs) -> bool {}

为什么不PartialEq::eq返回Option<Eq>whereNone代表不能确定相等的东西?为什么要PartialEq知道哪些值不能进行相等性比较,从而阻止了完整Eq特征的实现,但PartialOrd必须知道哪些值不能进行完整排序比较(因此它可以将该信息返回给用户作为None)?

回答

我可以想到为什么这些特征被定义为它们的方式的一些原因:

  1. PartialEq==运算符的特征。如果要返回 an Option,则if至少需要重新考虑围绕s 和其他控制流的语言工效学。

  2. 在考虑值是否相等时,“不可比较”的值属于后一类。不需要第三个答案;要么他们是平等的,要么不是。这对于>>=<<=由 提供PartialOrd,它们都返回,bool无论值是否“不可比较”(false在这种情况下它们返回)。

  3. 类型中“部分”的含义不同。“部分”PartialOrd表示类型可能没有总顺序。而“部分”PartialEq意味着类型可能没有完全等价关系(可能不是自反的、对称的或传递的)。命名是相似的,因为它们都涵盖了类型表现不佳的情况,但它们传达的概念略有不同。API 不需要完全相同。


以上是为什么PartialEq返回一个布尔值,当PartialOrd更细微并返回Option&lt;Ordering&gt;时?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>