
(&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条)