为什么在没有" mut"的情况下更改变量?不抛出可变性错误?

时间:2018-01-18 05:43:08

标签: rust mutability

我正在阅读 Rust By Example Scopes and Shadowing部分,并对变量的可变性感到困惑。 在此示例中,有一个变量定义为值。

let long_lived_binding = 1;

后来改为

let long_lived_binding = 'a';

据我了解,如果您想要更改变量,则需要将关键字mut放在其前面。例如let mut long_lived_binding = 1;为什么 Rust By Example 中的给定示例不会抛出可变性错误?

2 个答案:

答案 0 :(得分:1)

第一个变量被第二个变量遮挡。 Rust允许这样做。好像你用不同的名字定义了两个不同的变量。

答案 1 :(得分:1)

可变性可防止修改变量,但不会阻止您使用let引入具有相同名称的变量。差异很微妙但很明显。阴影可以改变值的类型。可变性不可能。

遮蔽:

let x = 2;
let x = "String";

可变性:

let x = 2;
x = 3; // will not compile because the variable that's immutable was assigned twice.

let mut x = 2;
x = 3;
x = "String"; // will not compile because you changed the type.

playground link