为类型的引用实现添加

Implementing add for reference of 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
    }
}

并给出错误:

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

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

生命周期需要用于所有存在的引用(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
    }
}