我有一个泛型类型,比如
impl<T: Eq> Eq for Complex<T> where T: Eq {}
出于某种原因,我可以 Complex<f32> 让它编译并调用 eq() 尽管 f32 不支持完全比较(因为nan!=南)。
Complex<f32>
eq()
f32
这怎么可能?
这个 eq 方法(在使用 == 操作员)是 PartialEq 特质,不是 Eq 是的。
eq
==
PartialEq
Eq
这个 情商 trait继承了它的所有方法 部分 ,不添加任何内容,其唯一目的是作为一个标记来断言 == 运算符形成 equivalence relation 关于实现类型。
情商
部分
类型如 HashMap 依靠 情商 而不是 部分 ,因此他们可以做出逻辑保证-例如:
HashMap
派生一个 情商 因为只有当所有子字段都是 情商 是的。但是,如果您实现 情商 你自己,你需要确保等价关系不变量得到支持。