rust 调用相同名称的方法 2020-11-16

rust语言中,各个trait 之间方法名称没有唯一性要求,所以当一个struct impl 一个或多个trait,再加上本身内部实现方法,可能会出现多个同名方法.这也是rust 变相实现函数重载的方式.
那么当存在多个同名方式时,该如何调用某一个指定的实现呢?
来看代码:

pub trait TraitA {

    fn method_a(&self){
        println!("this is TraitA::method_a");
    }

    fn method_b(){
        println!("this is TraitA::method_b");
    }

}

pub trait TraitB {

    fn method_a(&self);

    fn method_b(){
         println!("this is TraitB::method_b");
    }

}

struct TestStruct;

impl TestStruct{

    fn method_a(&self) {
        println!("this is TestStruct::method_a in impl TestStruct");
    }
    fn method_b(){
        println!("this is TestStruct::method_b in impl TestStruct");
    }

}

impl TraitA for TestStruct {

    fn method_a(&self){
        println!("this is TraitA::method_a in impl TestStruct");
    }

}

impl TraitB for TestStruct {
    
    fn method_a(&self){
        println!("this is TraitB::method_a in impl TestStruct");
    }

}

fn main() {

    let ts = TestStruct;

    ts.method_a();                          //this is TestStruct::method_a in impl TestStruct
    TraitA::method_a(&ts);                  //this is TraitA::method_a in impl TestStruct
    TraitB::method_a(&ts);                  //this is TraitB::method_a in impl TestStruct
    <TestStruct as TraitA>::method_a(&ts);  //this is TraitA::method_a in impl TestStruct
    <TestStruct as TraitB>::method_a(&ts);  //this is TraitB::method_a in impl TestStruct
    
    TestStruct::method_b();                     //this is TestStruct::method_b in impl TestStruct
    //TraitA::method_b();                       //错误
    //TraitB::method_b();                       //错误
    <TestStruct as TraitA>::method_b();         //this is TraitA::method_b
    <TestStruct as TraitB>::method_b();         //this is TraitB::method_b
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容