Rust 非重叠一致性规则?
在我的板条箱中,我想为所有预先声明的类型实现Rust 非重叠一致性规则?,rust,Rust,在我的板条箱中,我想为所有预先声明的类型实现Eq,并允许用户通过让他们的类型声明Eq来选择加入。于是我写道: impl<T: Noned + Copy + Eq + PartialEq> Eq for Optioned<T> {} impl Eq for Optioned<f32> {} impl Eq for Optioned<f64> {} impl Eq用于选项{} 可选{}的impl Eq 可选{}的impl Eq 然而,rustc向E
Eq
,并允许用户通过让他们的类型声明Eq
来选择加入。于是我写道:
impl<T: Noned + Copy + Eq + PartialEq> Eq for Optioned<T> {}
impl Eq for Optioned<f32> {}
impl Eq for Optioned<f64> {}
impl Eq用于选项{}
可选{}的impl Eq
可选{}的impl Eq
然而,rustc向E0119投诉,称我违反了一致性规则
MyOptioned
定义为pub-struct Optioned{value:T}
。Noned
特征是为所有数字原语预定义的
现在,无论是f32
还是f64
都没有实现Eq
,因此我认为impl是严格不重叠的。谁能
- 解释一下为什么连贯性规则会绊倒我
- 告诉我如何更改代码以使其正常工作
f32
或f64
。这些类型的实现者(在本例中是语言本身)可以选择在将来为这些类型实现Eq
如果发生这种情况,那么当您更新类型来自的板条箱(或者在本例中是语言)时,您的代码就会突然开始失败。为了防止这种情况发生,生锈不允许这种结构。据我所知,没有解决办法。我相信(在标题“负面推理引起的危险”下)回答了你的第一个问题,但恐怕我想不出一个好的解决办法。哎哟。是的,这似乎就是问题所在。所以我想正确的解决方案是要么对每一种类型实现这个,要么等到开发人员实现专门化或负特性边界。