没有 "let" 的影子

Shadowing in without "let"

据我了解,Rust 中的阴影允许您通过使用 let 并重新声明变量来使用相同的变量,例如

let x = 5;

let x = x + 1;

let x = x * 2;

println!("The value of x is: {}", x);

但是,如果您将变量设置为可变的,那么这不会模仿阴影,例如:

let mut x = 5;
println!("The value of x is: {}", x);
x = 6;
println!("The value of x is: {}", x);
 x = 7;
println!("The value of x is: {}", x);

示例1&2中,变量存储在什么地方,是栈还是堆?

您示例中的所有值都存储在堆栈中。在示例 1 中,每个 let 语句都会将一个新值压入堆栈。

看起来你从 The Rust Programming Language 那里得到了例子。也许再读一遍这一段以强调:

The other difference between mut and shadowing is that because we’re effectively creating a new variable when we use the let keyword again, we can change the type of the value but reuse the same name.