以下C#代码编译正常:
static readonly List<int> list = new List<int>();
static void Main(string[] args)
{
list.Add(1);
list.Add(2);
list.Add(3);
}
Run Code Online (Sandbox Code Playgroud)
如果我在Rust中编写类似的代码,它将无法编译,因为它不能将immutable借用v
为mutable:
let v = Vec::new();
v.push(1);
v.push(2);
v.push(3);
Run Code Online (Sandbox Code Playgroud)
push
函数如何知道v
是不可变的?
所有变量都默认为不可变的.您必须通过关键字明确告诉编译器哪些变量是可变的mut
:
let mut v = Vec::new();
v.push(1);
v.push(2);
v.push(3);
Run Code Online (Sandbox Code Playgroud)
Vec::push
被定义为需要对vector(&mut self
)的可变引用:
fn push(&mut self, value: T)
Run Code Online (Sandbox Code Playgroud)
这使用方法语法,但在概念上与以下内容相同:
fn push(&mut Vec<T>, value: T)
Run Code Online (Sandbox Code Playgroud)
我强烈建议您阅读第二版The Rust Programming Language.它涵盖了这个初学者问题以及您将遇到的许多其他初学者问题.