I was reading the Scopes and Shadowing section of Rust By Example and was confused about the mutability of variables. In this example there is a variable defined to a value of 1.
let long_lived_binding = 1;
It is later changed to
let long_lived_binding = 'a';
To my understanding, if you wanted to change a variable you needed to put the keyword mut in front of it. For example let mut long_lived_binding = 1; Why does the given example in Rust By Example not throw a mutability error?
Mutability prevents modification of a variable, but it will not prevent you introducing a variable with same name using let. The difference is subtle but noticeable. Shadowing can change the type of value. Mutability can't.
Shadowing:
let x = 2;
let x = "String";
Mutability:
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
The 1st variable get shadowed by the 2nd one. Rust allows that. It's as if you defined 2 different variables with different names.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With