不可变变量这个术语只是一个约定吗?

dar*_*cts 1 variables rust

在 Rust 中,变量默认是不可变的,即它们不会变化,但不是常量(如此处所述

他们只是按照惯例保留名称“变量”,还是有其他原因保留术语“变量”?

Zor*_*orf 5

应该指出的是,Rustmut中的这个术语在稳定之前就受到了激烈的争论,一些人认为它应该被称为or 。问题是in和 in是两个完全不同的东西。excluniqmutlet mut x&mut x

\n\n

let mut x声明它x是可变的,即它可以被重新分配,而且可以引用&mut它;最好将其称为独家独特参考。例如,在 Rust 中,某些情况下很可能通过共享引用进行变异std::cell::Cell,并且并非所有需要独占引用的操作都涉及变异。需要独占引用的操作对于共享引用来说是不安全的;Cell通过严格控制在什么条件下可以发生突变,其设计方式并非如此。

\n\n

理论上, 的两个函数let mut x可以具有不同的关键字,但为了简单起见,它们被压缩为一个。理论上,Rustmut可以使用和excl不同的关键字进行设计,并允许 for let excl x,这将是一个变量,可以从中获取独占引用,但不能变异。

\n\n

还可以拥有未使用 声明的变量mut,特别是在函数调用中。在像 之类的签名中fn func ( x : u32 ),x 不是可变的,但它是可变的,因为它x每次都可以传递不同的值。

\n\n

“可变”类型let mut x纯粹是一个 lint,理论上,Rust不需要工作 \xe2\x80\x94如果所有非可变变量都可变,任何当前正在工作的Rust程序都将继续工作。这样做被简单地认为是不好的做法,并且每当程序员将不必可变的变量设为可变时,编译器都会警告程序员;这有助于捕获意外的错误。独占引用和共享引用绝对不是这种情况,需要区分它们,而不仅仅是一个 lint。

\n

  • *在像“fn func ( x : u32 )”这样的签名中,x不是可变的,但它是可变的,因为它每次都可以传递不同的x。*我认为这是基本的观察。可变/独特的区别很有趣,但有点离题。 (3认同)