为什么在没有 "mut" 的情况下更改变量不会引发可变性错误?
Why does changing a variable without a "mut" not throw a mutability error?
我正在阅读 Rust By Example 的 Scopes 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.
我正在阅读 Rust By Example 的 Scopes 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.