我在理解如何实现以下目标时遇到了麻烦:我想要一个对我无法更改的向量的引用,其中包含我可以更改的数据(c++ T* const 等效)这是否可以在 rust 语法中实现?
let mut a = Vec::new()
a.push(1) // should be allowed
a = Vec::new() // should be disallowed.
Run Code Online (Sandbox Code Playgroud)
mut 似乎允许两个级别的可变性
这个:
let mut a = Vec::new()
Run Code Online (Sandbox Code Playgroud)
不创建对向量的引用;而是创建一个绑定到向量本身的变量。它相当于 C++ 中的这个:
std::vector<int> a;
Run Code Online (Sandbox Code Playgroud)
如果你想要一个对可变向量的不可变引用,你会有这样的事情:
let mut a = vec![1,2,3];
let r = &mut a;
r.push(4);
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,r是一个绑定到可变向量引用的不可变变量a。如果您尝试重新分配r为对另一个向量的引用:
let mut b = vec![4,5,6];
r=&mut b;
r.push(7);
Run Code Online (Sandbox Code Playgroud)
你会得到这个错误:
9 | r=&mut b;
| ^^^^^^^^ cannot assign twice to immutable variable
Run Code Online (Sandbox Code Playgroud)
但是请注意,由于 Rust 允许阴影,您可以使用 'let' 创建一个新绑定,在同一范围内阴影旧绑定,因此您可以这样做:
9 | r=&mut b;
| ^^^^^^^^ cannot assign twice to immutable variable
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |