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

标签 rust mutable

以下 C# 代码可以正常编译:

static readonly List<int> list = new List<int>();
static void Main(string[] args)
{
    list.Add(1);
    list.Add(2);
    list.Add(3);
}

如果我用 Rust 编写类似的代码,它不会编译,因为它不能将不可变的 v 借用为可变的:

let v = Vec::new();
v.push(1);
v.push(2);
v.push(3);

push 函数如何知道 v 是不可变的?

最佳答案

所有变量默认都是不可变的。你必须 explicitly tell the compiler which variables are mutable通过 mut 关键字:

let mut v = Vec::new();
v.push(1);
v.push(2);
v.push(3);

Vec::push被定义为需要对向量的可变引用 (&mut self):

fn push(&mut self, value: T)

这使用 method syntax ,但在概念上与:

fn push(&mut Vec<T>, value: T)

强烈推荐您阅读The Rust Programming Language, second edition .它涵盖了这个初学者问题以及您将遇到的许多其他初学者问题。

关于rust - Rust 如何知道变量是否可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46266400/

相关文章:

syntax - 奇怪的语法错误 'error: expected one of ` ,` or ` :`, found ` else`'

generics - 计算散列(digest::Digest trait)并返回字符串的通用函数

rust - 变量在 map 中的生命周期不够长

scala - Scala追加到可变的LinkedList

与 STUArray 一起使用的 Haskell 函数

error-handling - 我如何在 Rust 中简化这个可怕的嵌套错误处理代码?

scala - 将 Java 与 Scala 混合使用可变 TreeMap

c# - 为什么可变结构是 “evil” ?

python - 向集合列表中的元素添加值

rust - Rust 宏可以设置变量并同时返回值吗?