我正在阅读 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 中的给定示例不会抛出可变性错误?
答案 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.