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-7 / 59.00元

《我在阿里做运营》是一本散发着浓浓阿里味儿的运营书。作者进入互联网行业7年,曾就职于携程、阿里巴巴等大平台,也服务过小微企业、传统企业及诸多职场新人。不仅经历过各类运营岗,也经历过市场、品牌等岗位,对精细化运营、数据化运营和低成本运营有着深刻见解。 本书展示了在阿里这样的大平台做运营工作的真实场景,也提炼了适用于小微企业的经验,以及让运营新人快速上手的技能和自我修养、职业规划。一起来看看 《我在阿里做运营》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具