Rust完全限定语法与消歧义:调用相同名称的方法

栏目: 编程语言 · Rust · 发布时间: 5年前

内容简介:Rust既不能避免一个下面示例代码说明了具体用法:运行结果:

Rust既不能避免一个 trait 与另一个 trait 拥有相同名称的方法,也不能阻止为同一类型同时实现这两个 trait 。甚至可以直接在类型上实现开始已经有的同名方法!当然,当调用这些同名方法时,你必须要告诉Rust我们使用哪一个。

下面示例代码说明了具体用法:

pub trait Airplane {
    fn speed(&self){
        println!("airplane default speed=800");
    }

    fn state(){
        println!("fly state");
    }
}

pub trait Boat {
    fn speed(&self);
    fn state(){
        println!("boat state");
    }
}

struct Airboat;

impl Airboat{
    fn speed(&self) {
        println!("airboat speed 0~800");
    }
    fn state(){
        println!("airboat state");
    }
}

impl Airplane for Airboat {
    fn speed(&self){
        println!("airboat in airplane state speed=800");
    }
}

impl Boat for Airboat {
    fn speed(&self){
        println!("airboat in boat state speed=60");
    }
}

fn main() {
    let a = Airboat;
    Airboat::state();
    a.speed();  //默认调用自身的实现
    <Airboat as Airplane>::state(); //完全限定语法
    Airplane::speed(&a);    //显示语法指定调用Airplane方法
    <Airboat as Airplane>::speed(&a);
    <Airboat as Boat>::state();
    Boat::speed(&a);
}
复制代码

运行结果:

airboat state
airboat speed 0~800
fly state
airboat in airplane state speed=800
airboat in airplane state speed=800
boat state
airboat in boat state speed=60
复制代码

通常,完全限定语法定义为: <Type as Trait>::function(receiver_if_method, next_arg, ...)

在存在调用相同名称方法时,重要的是告诉编译器你调用的是具体那个方法,上面的示例代码给出了调用相同名称时的调用方法。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

注意力商人

注意力商人

吳修銘 / 黃庭敏 / 天下雜誌 / 2018-4-2 / NT$650

電子郵件,免費!照片分享,無上限! 你是否想過,隨手可得的免費內容、便利的免費服務,到底都是誰在付費? 如果商品免費,那你就不是消費者,而是商品! 你我可能都不知不覺地把自己賣給了注意力商人! 「『媒體轉型、網路演化與資訊浪潮」此一主題最具洞見的作者。』──黃哲斌(資深媒體人) 「這是少有的關注產業發展的傳播史,對現在或未來的『注意力產業』」中人來說,不可不讀。」──......一起来看看 《注意力商人》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码