(&var).call()优先匹配&self实现
(&mut var).call()优先匹配&mut self实现
(var).call()优先匹配self实现
测试代码:
struct Nemo; trait Say { fn say(&self); } trait SayMut { fn say(&mut self); } trait Sayonce { fn say(self); } impl Say for Nemo { fn say(&self) { println!("say bbb") } } impl SayMut for Nemo { fn say(&mut self) { println!("say ccc") } } impl Sayonce for Nemo { fn say(self) { println!("say ddd") } } impl Nemo { fn say(&self) { println!("say aaa") } // fn say(&mut self) { // println!("say aaa") // } // fn say(&mut self) { // println!("say aaa") // } } fn main() { let mut k = Nemo; (&k).say(); }2.匹配trait实现,如果存在trait冲突,则报错
impl Say for Nemo { fn say(&self) { println!("say bbb") } } impl Sayonce for &Nemo { fn say(self) { println!("say ddd") } } fn main() { let mut k = Nemo; (&k).say();//multiple `say` found }3.Defer/DeferMut匹配,调用后重新匹配规则1、2。 4.转换匹配
self->&mut self
&mut self->& self
如果规则4匹配失败,执行规则3后再次执行规则4。
trait Say { fn say(&self); } trait SayMut { fn say(&mut self); } struct Nemo; impl Nemo {} impl Say for &mut &mut Nemo { fn say(&self) { println!("say bbb") } } impl SayMut for &mut Nemo { fn say(&mut self) { println!("say ccc") } } fn main() { let mut k: Nemo = Nemo; (&mut &mut &mut k).say(); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)