为什么在Rust中强制执行不变性,除非使用`mut`另有说明?

met*_*man 10 immutability rust

为什么在Rust中强制使用不变性,除非你指定mut?这是安全性的设计选择吗,您是否认为它在其他语言中应该如何自然?

我应该澄清一下,我还是Rust的新手.那么这是一种与该语言中的另一个功能相关的设计选择吗?

oli*_*obk 15

防锈书实际上解决了这个问题.

默认情况下绑定是不可变的没有单一原因,但我们可以通过Rust的一个主要关注点来考虑它:安全性.如果你忘了说mut,编译器会捕获它,并让你知道你已经改变了一些你可能没想要改变的东西.如果默认情况下绑定是可变的,编译器将无法告诉您这一点.如果你确实打算突变,那么解决方案相当简单:添加mut.

在可能的情况下,还有其他充分的理由可以避免可变状态,但它们超出了本指南的范围.通常,您通常可以避免显式变异,因此在Rust中更可取.也就是说,有时候,突变就是你所需要的,所以它不是禁止的.

基本上它是C++ - Mantra,你不想修改的所有内容都应该是const,只需通过颠倒规则来正确完成.另请参阅有关C++的Stackoverflow文章.

  • 不只是多数,而是绝大多数.一个非科学的测试:我只是抓住了Cargo的来源,并且有356个'let mut'实例,以及1937个'let'实例(当然这个实例也算是mut,所以1581 pure let). (4认同)
  • 甚至不计算函数参数.当包含函数args时,我打赌这个比率甚至更大 (3认同)
  • 完美,我可能应该在发布之前检查他们的参考/规格/书:) (2认同)