Rust 在其他性状上继承/嵌套性状

Rust 在其他性状上继承/嵌套性状,rust,Rust,在Rust中,是否有可能将一个特性概括为始终实现另一个特性,或者让一个结构“继承”其特性对其他特性的实现 例如,在下面的代码中,我不想在所有可能的长度类型之间实现相等。如果我在trait上实现它,我如何在实现该trait的结构上使用它 /`Length`特征,包括标准化单位 性状长度{ fn_标准化(&self)->f64; } 用于dyn长度的impl std::cmp::PartialEq{ fn eq(&self,其他:&self)->bool{ 自。_标准化()==其他。_标准化() }

在Rust中,是否有可能将一个特性概括为始终实现另一个特性,或者让一个结构“继承”其特性对其他特性的实现

例如,在下面的代码中,我不想在所有可能的
长度类型之间实现相等。如果我在trait上实现它,我如何在实现该trait的结构上使用它

/`Length`特征,包括标准化单位
性状长度{
fn_标准化(&self)->f64;
}
用于dyn长度的impl std::cmp::PartialEq{
fn eq(&self,其他:&self)->bool{
自。_标准化()==其他。_标准化()
}
}
//”“厘米`
结构厘米(f64);
以厘米为单位的impl长度{
fn_标准化(自我)->f64{
让&厘米(cm)=自我;
厘米
}
}
//”“英寸`
结构英寸(i32);
以英寸为单位的impl长度{
fn_标准化(自我)->f64{
让&英寸(英寸)=自我;
英寸为f64*2.54
}
}
fn main(){
让英尺=英寸(12);
让米=厘米(100.0);
设cmp=if foot==meter{“equal”}否则{“notequal”};
println!(“一英尺等于{}到一米。”,cmp);
}
目前,这会引发一个错误:

binary operation `==` cannot be applied to type `partial_ord::Centimeters`

note: an implementation of `std::cmp::PartialEq` might be missing for `partial_ord::Centimeters`
rustc(E0369)
基于此,我还尝试:

impl std::cmp::PartialEq for T,其中T:Length{
给 类型“&”的trait`std::cmp::PartialEq`的实现冲突:

有没有办法做我想做的事?如果有,是什么?
(而且,如果你想获得额外的荣誉,那么这个例子在我的Rust范例中突出了什么差距?

当出现这种情况时,这是可能的,但你目前试图做的是不可能的。你可以要求所有实现
Length
的类型也必须(单独)通过
trait Length:PartialEq实现
PartialEq
{…}
。或者,一般来说,更好的方法只是在
Length
特性中使您自己的
长度相等
方法,并将该
method
作为您的
self.\u standarized()==other.\u standarized()
,它与内置的
PartialEq
特征不重叠,因为类型可能需要长度相等以外的相等。@Aplet123不能为t:Lenght实现PartialEq吗?@Aplet123谢谢。1)专门化——以及它当前的缺失——解释了
冲突的实现…
错误。2)“…因为类型除了长度相等之外可能还需要相等”,再加上Rust故意不重载,这是一个很好的理由,并实现了
equal_length()
似乎是一个很好的解决方案。3)我认为我的范例中的差距似乎是Rust采取了一种积极的方法,试图阻止重载而支持明确性。