Rust如何知道变量是否可变?

Jan*_*kke 2 mutable rust

以下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是不可变的?

She*_*ter 9

所有变量都默认为不可变的.您必须通过关键字明确告诉编译器哪些变量是可变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.它涵盖了这个初学者问题以及您将遇到的许多其他初学者问题.