是否可以为特征
fun_b
的函数/方法TraitB
定义默认实现,以防特征TraitA
也被实现?
下面我定义了一个额外的特征 TraitBDerived
和超级特征 TraitA
但我希望这个潜在的默认实现是透明的,因为不需要使用另一个特征。
trait TraitA {
fn fun_a() -> String;
}
trait TraitB {
fn fun_b() -> String;
}
trait TraitBDerived: crate::TraitA {
fn fun_b() -> String {
String::from("prefix ").add(&Self::fun_a())
}
}
就像标准库中一样 - 为所有实现
TraitB
的类型实现 TraitA
,例如参见游乐场
但请注意,您无法为所有类型实现外部特征,只能实现您定义的特征。
use std::ops::Add;
trait TraitA {
fn fun_a() -> String;
}
trait TraitB {
fn fun_b() -> String;
}
impl<T> TraitB for T where T: TraitA {
fn fun_b() -> String {
String::from("prefix ").add(&Self::fun_a())
}
}
impl TraitA for i32 {
fn fun_a() -> String { "TraitA".to_owned() }
}
impl TraitB for usize {
fn fun_b() -> String { "TraitB".to_owned() }
}
fn main(){
println!("{}", i32::fun_a()); // TraitA
println!("{}", i32::fun_b()); // prefix TraitA
//println!("{}", usize::fun_a()); // not implemented
println!("{}", usize::fun_b()); // TraitB
}