栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

rust相同方法名调用顺序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

rust相同方法名调用顺序

1.优先匹配非trait实现,根据调用方式优先匹配

(&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();
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号