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 };