我是Rust的新手,我不确定为什么在foo
循环中未修改阴影变量for
的值
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
}
我经历了Variables and Mutability section和一些stackoverflow问题,但是我找不到
foo
的值未被修改的原因?我在
loop
中看到了相同的行为for
和loop
对阴影变量有一些限制吗?为什么不允许呢? mut
能力变量吗?最佳答案
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);
另一方面,
let bar=bar+1
在与以前的bar
相同的作用域内创建了一个新的变量bar
,因此第一个bar
被新的bar
遮盖,并且基本上不再可以访问。
关于linux - rust 循环中的阴影变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61303327/