应该指出的是,Rustmut
中的这个术语在稳定之前就受到了激烈的争论,一些人认为它应该被称为or 。问题是in和 in是两个完全不同的东西。excl
uniq
mut
let mut x
&mut x
let mut x
声明它x
是可变的,即它可以被重新分配,而且可以引用&mut
它;最好将其称为独家或独特参考。例如,在 Rust 中,某些情况下很可能通过共享引用进行变异std::cell::Cell
,并且并非所有需要独占引用的操作都涉及变异。需要独占引用的操作对于共享引用来说是不安全的;Cell
通过严格控制在什么条件下可以发生突变,其设计方式并非如此。
理论上, 的两个函数let mut x
可以具有不同的关键字,但为了简单起见,它们被压缩为一个。理论上,Rustmut
可以使用和excl
不同的关键字进行设计,并允许 for let excl x
,这将是一个变量,可以从中获取独占引用,但不能变异。
还可以拥有未使用 声明的变量mut
,特别是在函数调用中。在像 之类的签名中fn func ( x : u32 )
,x 不是可变的,但它是可变的,因为它x
每次都可以传递不同的值。
“可变”类型let mut x
纯粹是一个 lint,理论上,Rust不需要工作 \xe2\x80\x94如果所有非可变变量都可变,任何当前正在工作的Rust程序都将继续工作。这样做被简单地认为是不好的做法,并且每当程序员将不必可变的变量设为可变时,编译器都会警告程序员;这有助于捕获意外的错误。独占引用和共享引用绝对不是这种情况,需要区分它们,而不仅仅是一个 lint。