为什么在 for 循环中没有修改阴影变量的值?

Vik*_*kar 0 for-loop rust

我不确定为什么foofor循环中没有修改阴影变量的值:

fn main() {
    let foo: i32 = 5;
    for _x in 0..5 {
        let foo = foo + 1;
    }
    println!("Value of foo: {}", foo);
    //This prints Value of foo: 5

    let bar: i32 = 5;
    let bar = bar + 1;
    println!("Value of bar: {}", bar);
    //This prints Value of foo: 6
}
Run Code Online (Sandbox Code Playgroud)

我浏览了变量和可变性部分以及一些堆栈溢出问题,但我找不到foo未修改值的原因。

我在loop.

  1. 不要forloop有阴影变量的一些限制?为什么不允许?
  2. 如果在循环中隐藏变量不是一个好习惯,我应该使用一个mut能够变量吗?

我正在使用 Rust 1.42.0

phi*_*mue 5

let “引入/创建一个新变量”。

因此,let foo = foo+1;创建一个名为“foo”的新变量,它只存在于循环中。这个变量被初始化为foo+1,只有“右手边foo”指的是已经存在的foo

因此,只创建了“内循环foo”,而外foo循环不会触及。

如果你想修改外层foo,试试这个:

let mut foo: i32 = 5; // mut tells rust that variable is going to be modified
for _x in 0..5{
    foo = foo+1; // no "let", so not introducing a new variable
}
println!("Value of foo: {}", foo);
Run Code Online (Sandbox Code Playgroud)

另一方面,在与前一个作用域相同的范围内let bar=bar+1创建一个新变量,因此第一个变量被新变量遮蔽,基本上无法再访问。barbarbarbar