矢量索引:不能移出取消引用

时间:2014-09-28 13:19:52

标签: rust

我正在尝试通过实现一些基本数据结构来学习Rust。在这种情况下,Matrix

struct Matrix<T> {
  pub nrows: uint,
  pub ncols: uint,
  pub rows: Vec<T>
}

现在,我想使用此功能转置Matrix

pub fn transpose(&self) -> Matrix<T> {
  let mut trans_matrix = Matrix::new(self.ncols, self.nrows);
  for i in range(0u, self.nrows - 1u) {
    for j in range(0u, self.ncols - 1u) {
      trans_matrix.rows[j*i] = self.rows[i*j]; // error
    }
  }
  trans_matrix
}

但是我在标记的行上出现了这个错误:

error: cannot move out of dereference (dereference is implicit, due to indexing)
error: cannot assign to immutable dereference (dereference is implicit, due to indexing)

所以我要做的是使rows trans_matrix变为可变,并以某种方式修复dereference错误。我怎么解决这个问题?感谢。

1 个答案:

答案 0 :(得分:1)

使用

*trans_matrix.rows.get_mut(j * i) = self.rows[i * j];

有效,但只是一种解决方法。我不知道在IndexMut按预定工作之前需要多长时间,或者如果它已经有效,但是这是首选的方式