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

Why does changing a variable without a "mut" not throw a mutability error?

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

let long_lived_binding = 1;

后来改为

let long_lived_binding = 'a';

根据我的理解,如果你想改变一个变量,你需要在它前面加上关键字 mut。例如 let mut long_lived_binding = 1; 为什么 Rust By Example 中给出的例子没有抛出可变性错误?

第一个变量被第二个变量覆盖。 Rust 允许这样做。就好像你用不同的名字定义了 2 个不同的变量。

可变性可防止修改变量,但不会阻止您使用 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