原因
今天突发奇想, 想试试rust有没有trait的混乱行为. 没有编译器都给你检查过了.
trait Root {
fn print(&self){
println!("i am root");
}
}
trait LA:Root{
fn print(&self){
println!("i am level 1 A");
}
fn la(&self){
println!("lllllllA");
}
}
trait LB:Root{
fn print(&self){
println!("i am level 1 B");
}
fn lb(&self){
println!("lllllllb");
}
}
struct App{}
//默认实现
impl Root for App{ }
impl LA for App{}
impl LB for App{}
fn main(){
let a = App{};
Root::print(&a);
a.print(); //这里会报错
}
有点像多继承了.
但是rust并不会编译通过, 因为对于a.print()
不知道你要用哪一个trait的print
解决办法
trait LA中删掉print函数, 即保持print