rust绿卡名称_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(); //默认调用自身的实现

::state(); //完全限定语法

Airplane::speed(&a); //显示语法指定调用Airplane方法

::speed(&a);

::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

通常,完全限定语法定义为:::function(receiver_if_method, next_arg, ...)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值