在我的 optional crate 中,我想要为所有预声明的类型实现
然而,rustc使用“E0119”报错,指出我违反了一致性规则。
我的“Optioned”被定义为“pub struct Optioned { value: T }”。对于所有数字基元类型,都预定义了“Noned”特征。
现在,既然“f32”和“f64”都没有实现“Eq”,因此我认为 impls 应该是严格非重叠的。有人能
- 解释为什么一致性规则会使我陷入困境, - 告诉我如何更改代码以使其正常工作吗?
Eq
,并允许用户通过声明Eq
来选择加入。因此,我编写了以下代码:impl<T: Noned + Copy + Eq + PartialEq> Eq for Optioned<T> {}
impl Eq for Optioned<f32> {}
impl Eq for Optioned<f64> {}
然而,rustc使用“E0119”报错,指出我违反了一致性规则。
我的“Optioned”被定义为“pub struct Optioned { value: T }”。对于所有数字基元类型,都预定义了“Noned”特征。
现在,既然“f32”和“f64”都没有实现“Eq”,因此我认为 impls 应该是严格非重叠的。有人能
- 解释为什么一致性规则会使我陷入困境, - 告诉我如何更改代码以使其正常工作吗?