Rust 为类型的引用实现add

Rust 为类型的引用实现add,rust,reference,operators,add,Rust,Reference,Operators,Add,我正在尝试为包含数组的结构实现add方法。 我想实现泛型类型的方法,这些泛型类型为各自的引用实现AddAssign。 以下代码不兼容 #[derive(Debug, Copy, Clone)] pub struct Test<T> { data: [T; 2] } impl<T> Add<&Test<T>> for Test<T> where T: AddAssign<&T> { type

我正在尝试为包含数组的结构实现add方法。 我想实现泛型类型的方法,这些泛型类型为各自的引用实现AddAssign。 以下代码不兼容

#[derive(Debug, Copy, Clone)]
pub struct Test<T> {
    data: [T; 2]
}

impl<T> Add<&Test<T>> for Test<T> where T: AddAssign<&T> {
    type Output = Test<T>;

    fn add(mut self, rhs: &Test<T>) -> Self::Output {
        self.data.iter_mut().zip(rhs.data.iter()).for_each(|(r, l)| {
            *r += l;
        });
        self
    }
}
#[派生(调试、复制、克隆)]
pub结构测试{
数据:[T;2]
}
用于测试的impl Add,其中T:AddAssign{
类型输出=测试;
fn add(mut self,rhs:&Test)->self::Output{
self.data.iter_mut().zip(rhs.data.iter())。for_each(|(r,l)|{
*r+=l;
});
自己
}
}
并给出了错误:

impl<T> Add<&Test<T>> for Test<T> where T: AddAssign<&T> {
   |                                                      ^ explicit lifetime name needed here

impl Add for Test,其中T:AddAssign{
|^此处需要显式的生存期名称

但是定义生存期只会产生其他错误。我可以通过取消引用来解决这个问题,但这不是我想要的,因为我相信这会导致不必要的复制。有没有办法让它起作用?

生存期需要用于所有存在的引用(impl定义和rhs引用)。以下代码将为我编译:

impl<'a, T> Add<&'a Test<T>> for Test<T> where T: AddAssign<&'a T> {
    type Output = Test<T>;

    fn add(mut self, rhs: &'a Test<T>) -> Self::Output {
        self.data.iter_mut().zip(rhs.data.iter()).for_each(|(r, l)| {
            *r += l;
        });
        self
    }
}
测试的impl,其中T:AddAssign Self::Output{ self.data.iter_mut().zip(rhs.data.iter())。for_each(|(r,l)|{ *r+=l; }); 自己 } }
谢谢!,工作得很有魅力