内容简介:在实际的工程中,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, ...)
在存在调用相同名称方法时,重要的是告诉编译器你调用的是具体那个方法,上面的示例代码给出了调用相同名称时的调用方法。其实其他语言也有类似的问题(例如C++),解决方法都差不多。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Alone Together
Sherry Turkle / Basic Books / 2011-1-11 / USD 28.95
Consider Facebookit’s human contact, only easier to engage with and easier to avoid. Developing technology promises closeness. Sometimes it delivers, but much of our modern life leaves us less connect......一起来看看 《Alone Together》 这本书的介绍吧!