在Rust中如何编写支持+ =运算的特征界线,该运算符的右手参考

我想写一个支持Vector结构的Add操作,并写一些使用Vector结构的特征,所以我写了这个。

use std::ops::*;
#[derive(Clone)]
struct Vector<T>(Vec<T>);

impl<'a, T> Add<&'a Vector<T>> for Vector<T>
where
    T: AddAssign<&'a T>,
{
    type Output = Vector<T>;
    fn add(mut self, rhs: &'a Vector<T>) -> Self::Output {
        self.0
            .iter_mut()
            .zip(rhs.0.iter())
            .for_each(|(left, right)| {
                *left += right;
            });
        self
    }
}

trait SomeOperation<'a ,T>
where
    T: AddAssign<&'a T>+Clone + 'a,
{
    fn add(u:Vector<T>,v:&'a Vector<T>)->Vector<T>{
        let w = u+v;
        let x = v.clone()+&w;
        x
    }
}

但是会发生编译错误。

21 | trait SomeOperation<'a ,T>
   |                     -- lifetime `'a` defined here
...
27 |         let x = v.clone()+&w;
   |                           ^^
   |                           |
   |                           borrowed value does not live long enough
   |                           requires that `w` is borrowed for `'a`
28 |         x
29 |     }
   |     - `w` dropped here while still borrowed

如何避免这些类型的错误。