Rust 同一类型的addtrait的多个实现
我试着做一些非常简单的事情,比如:Rust 同一类型的addtrait的多个实现,rust,traits,Rust,Traits,我试着做一些非常简单的事情,比如: fn main() { #[deriving(Show)] struct A { a: int } impl Add<A, A> for A { fn add(&self, other: &A) -> A { A { a: self.a + other.a } } } impl Add<int, A> for A {
fn main() {
#[deriving(Show)]
struct A {
a: int
}
impl Add<A, A> for A {
fn add(&self, other: &A) -> A {
A { a: self.a + other.a }
}
}
impl Add<int, A> for A {
fn add(&self, v: &int) -> A {
A { a: self.a + *v }
}
}
let x = A { a: 10 } + A { a: 20 };
println!("x: {}", x);
}
let x: A = A { a: 10 } + A { a: 20 };
let y: A = A { a: 10 } + 20i;
let z: A = A 10i + { a: 20 };
最佳方法是什么?更新:
是的,您现在就可以实现它了强>
怎么做?以与以下类似的方式:
use std::ops::Add;
#[derive(Debug)]
struct A {
a: i32,
}
impl Add<i32> for A {
type Output = A;
fn add(self, _rhs: i32) -> A {
A { a : self.a + _rhs }
}
}
impl Add<A> for A {
type Output = A;
fn add(self, _rhs: A) -> A {
A { a : self.a + _rhs.a }
}
}
fn main() {
let x = A { a: 10 } + A { a: 20 };
let y = A { a: 40 } + 2;
println!("x: {:?}\ny: {:?}", x, y);
}
Rust查找所有已实现的添加特征,查找一个。问题是因为有两个已定义的:impl Add将为您执行添加操作,如示例所示。
B) 等待关联类型落地,这是更好的选择。()
C) 放弃impl Add获得一个
我想你想要的是多发的,应该很快就要着陆了。有关详细信息,请参阅此部分。对于同一类型,不支持许多trait实现,您可以使用此解决方法:我认为这不是性能问题,而是更关心的是不确定性和“板条箱可组合性”。我希望多发邮件能很快到达。它至少对这类二进制运算符非常有用。
use std::ops::Add;
#[derive(Debug)]
struct A {
a: i32,
}
impl Add<i32> for A {
type Output = A;
fn add(self, _rhs: i32) -> A {
A { a : self.a + _rhs }
}
}
impl Add<A> for A {
type Output = A;
fn add(self, _rhs: A) -> A {
A { a : self.a + _rhs.a }
}
}
fn main() {
let x = A { a: 10 } + A { a: 20 };
let y = A { a: 40 } + 2;
println!("x: {:?}\ny: {:?}", x, y);
}
let x = A { a: 10 } + A { a: 20 };