Rust 将集合移出上下文

Rust 将集合移出上下文,rust,borrow-checker,Rust,Borrow Checker,我试着用生命周期来实现一些特性,但像往常一样,我在和借阅检查程序作斗争 我的特点是: pub struct Matrix<T> { pub cols: usize, pub rows: usize, pub data: Vec<T> } impl<'a, 'b, T: Copy + Mul<T, Output=T>> Mul<&'b T> for &'a Matrix<T> {

我试着用生命周期来实现一些特性,但像往常一样,我在和借阅检查程序作斗争

我的特点是:

pub struct Matrix<T> {
    pub cols: usize,
    pub rows: usize,
    pub data: Vec<T>
}

impl<'a, 'b, T: Copy + Mul<T, Output=T>> Mul<&'b T> for &'a Matrix<T> {
    type Output = Matrix<T>;

    fn mul(self, f: &T) -> Matrix<T> {
        let new_data : Vec<T> = self.data.into_iter().map(|v| v * (*f)).collect();

        Matrix {
            cols: self.cols,
            rows: self.rows,
            data: new_data
        }
    }
}

我想我理解为什么会发生这种情况:我在借用自己,所以我无法复制数据。我该如何解决这个问题呢?

发生这种情况是因为您在向量上使用
进入iter()
。由于您在
T
上绑定了
Copy
,因此这是不必要的;您可以只使用
iter()
并在闭包中取消引用参数:

pub struct Matrix<T> {
    pub cols: usize,
    pub rows: usize,
    pub data: Vec<T>
}

impl<'a, 'b, T: Copy + Mul<T, Output=T>> Mul<&'b T> for &'a Matrix<T> {
    type Output = Matrix<T>;

    fn mul(self, f: &T) -> Matrix<T> {
        let new_data: Vec<T> = self.data.iter().map(|v| *v * *f).collect();

        Matrix {
            cols: self.cols,
            rows: self.rows,
            data: new_data
        }
    }
}
pub结构矩阵{
酒吧:使用,
酒吧行:usize,
发布数据:Vec
}
impl-Mul矩阵{
让新的数据:Vec=self.data.iter().map(|v |*v**f.collect();
母体{
科尔斯:赛尔夫·科尔斯,
行:self.rows,
数据:新数据
}
}
}

()

可能重复的
插入iter
的重要一点是:
fn插入iter(self)->self::IntoIter
<另一方面,代码>国际热核实验堆(iter),仅限(
&self
)。感谢您的澄清。我知道这一定很简单!
pub struct Matrix<T> {
    pub cols: usize,
    pub rows: usize,
    pub data: Vec<T>
}

impl<'a, 'b, T: Copy + Mul<T, Output=T>> Mul<&'b T> for &'a Matrix<T> {
    type Output = Matrix<T>;

    fn mul(self, f: &T) -> Matrix<T> {
        let new_data: Vec<T> = self.data.iter().map(|v| *v * *f).collect();

        Matrix {
            cols: self.cols,
            rows: self.rows,
            data: new_data
        }
    }
}