为什么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)?
回答
我可以想到为什么这些特征被定义为它们的方式的一些原因:
-
PartialEq是==运算符的特征。如果要返回 anOption,则if至少需要重新考虑围绕s 和其他控制流的语言工效学。 -
在考虑值是否相等时,“不可比较”的值属于后一类。不需要第三个答案;要么他们是平等的,要么不是。这对于
>、>=、<和<=由 提供PartialOrd,它们都返回,bool无论值是否“不可比较”(false在这种情况下它们返回)。 -
类型中“部分”的含义不同。“部分”
PartialOrd表示类型可能没有总顺序。而“部分”PartialEq意味着类型可能没有完全等价关系(可能不是自反的、对称的或传递的)。命名是相似的,因为它们都涵盖了类型表现不佳的情况,但它们传达的概念略有不同。API 不需要完全相同。
THE END
二维码