如何在Rust中使不可变变量指向可变数据

  • 本文关键字:数据 变量 不可变 Rust rust
  • 更新时间 :
  • 英文 :


我很难理解如何实现以下目标:我想引用一个我不能更改的向量,包含我可以更改的数据(c++T*const等价(这在rust语法中可以实现吗?

let mut a = Vec::new()
a.push(1) // should be allowed
a = Vec::new() // should be disallowed.

mut似乎允许在两个级别上的可变性

这:

let mut a = Vec::new()

不创建对矢量的引用;相反,它创建了一个绑定到向量本身的变量。它相当于C++中的

std::vector<int> a;

如果你想要一个对可变向量的不可变引用,你会有这样的东西:

let mut a = vec![1,2,3];
let r = &mut a;
r.push(4);

在上面的代码片段中,r是一个不可变变量,绑定到可变向量a的引用。如果您试图重新分配r作为另一个矢量的参考:

let mut b = vec![4,5,6];
r=&mut b;
r.push(7);

你会得到这个错误:

9 |     r=&mut b;
|     ^^^^^^^^ cannot assign twice to immutable variable

游乐场

然而,请注意,由于Rust允许阴影,您可以使用"let"创建一个新绑定,对同一范围内的旧绑定进行阴影处理,因此您可以这样做:

let mut a = vec![1, 2, 3];
let r = &mut a;
r.push(4);
let mut b = vec![4, 5, 6];
let r = &mut b;
r.push(7);

最新更新