此问题在此处已有答案:
In Rust, what's the difference between "shadowing" and "mutability"?(1个答案)
Why do I need rebinding/shadowing when I can have mutable variable binding?(2个答案)
28天前关闭
我在rust中有两个独立但相似的程序,给出不同的输出:
fn main() {
let mut x = 1;
while x < 10 {
println!("{}", x);
x = x + 1;
}
}
字符串
和
fn main() {
let x = 1;
while x < 10 {
println!("{}", x);
let x = x + 1;
}
}
型
现在第一个程序打印数字1到9,但是第二个程序只是循环打印1。不变性在这个差异中扮演了什么角色?
1条答案
按热度按时间bihw5rsg1#
在你的代码中,
let x = x + 1;
隐藏了外部变量x,这个变量的作用域在循环内部,所以从技术上讲,你会打印出1
。当你修改在循环外部声明的原始变量时,可变性将发挥作用。你所做的是在这段代码的每次迭代中创建一个新变量x字符串
如果你不像下面这样使x可变,
型
你会得到错误的结果
错误[E0384]:无法将两次赋值给不可变变量
x