如果有多个具有相同功能名称的特征,我想知道如何从特征中调用函数。
问题出在33行或
tr1::tr(v);
我该如何表达自己想调用的特征?
struct V2D {
x: i32,
y: i32
}
impl V2D {
fn new(x: i32, y: i32) -> V2D {
V2D{x,y}
}
}
trait tr1 {
fn tr();
}
trait tr2 {
fn tr();
}
impl tr1 for V2D {
fn tr() {
println!("This is tr1");
}
}
impl tr2 for V2D {
fn tr() {
println!("This is tr2");
}
}
fn main() {
let v = V2D::new(1,2);
tr1::tr(v);
}
答案 0 :(得分:0)
如果您使用的方法具有tr1::tr(v)
参数(Permalink to the playground),则您使用的语法(self
)是正确的,但是如果没有,则需要调用它在明确指定类型和特征的类型上:
<V2D as tr1>::tr()
答案 1 :(得分:0)
最简单的方法是使用fully qualified syntax。在您的情况下,tr
是一个关联函数,因此您只需要进行一点类型转换:
fn main() {
let v = V2D::new(1,2);
<V2D as tr1>::tr();
<V2D as tr2>::tr();
}
另一方面,方法的语法如下:
struct V2D {
x: i32,
y: i32
}
impl V2D {
fn new(x: i32, y: i32) -> V2D {
V2D{x,y}
}
}
trait tr1 {
fn tr(&self);
}
trait tr2 {
fn tr(&self);
}
impl tr1 for V2D {
fn tr(&self) {
println!("This is tr1");
}
}
impl tr2 for V2D {
fn tr(&self) {
println!("This is tr2");
}
}
fn main() {
let v = V2D::new(1,2);
tr1::tr(&v);
}