Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 非重叠一致性规则?_Rust - Fatal编程技术网

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投诉,称我违反了一致性规则

My
Optioned
定义为
pub-struct Optioned{value:T}
Noned
特征是为所有数字原语预定义的

现在,无论是
f32
还是
f64
都没有实现
Eq
,因此我认为impl是严格不重叠的。谁能

  • 解释一下为什么连贯性规则会绊倒我
  • 告诉我如何更改代码以使其正常工作
现在,f32和f64都没有实现Eq,所以我认为IMPL是严格不重叠的

问题源于您不控制类型
f32
f64
。这些类型的实现者(在本例中是语言本身)可以选择在将来为这些类型实现
Eq


如果发生这种情况,那么当您更新类型来自的板条箱(或者在本例中是语言)时,您的代码就会突然开始失败。为了防止这种情况发生,生锈不允许这种结构。据我所知,没有解决办法。

我相信(在标题“负面推理引起的危险”下)回答了你的第一个问题,但恐怕我想不出一个好的解决办法。哎哟。是的,这似乎就是问题所在。所以我想正确的解决方案是要么对每一种类型实现这个,要么等到开发人员实现专门化或负特性边界。