今天突发奇想, 想试试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函数的唯一性.
trait Root { fn print(&self){ println!("i am root"); } } trait LA:Root{ fn la(&self){ println!("lllllllA"); } } struct App{ } impl Root for App{ fn print(&self){ println!("Root app get!"); } } impl LA for App{ fn la(&self){ } } fn main(){ let a = App{}; a.print(); }