rust中的不可变与可变变量行为[重复]

tnkciper  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(128)

此问题在此处已有答案

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。不变性在这个差异中扮演了什么角色?

bihw5rsg

bihw5rsg1#

在你的代码中,let x = x + 1;隐藏了外部变量x,这个变量的作用域在循环内部,所以从技术上讲,你会打印出1。当你修改在循环外部声明的原始变量时,可变性将发挥作用。你所做的是在这段代码的每次迭代中创建一个新变量x

while x < 10 {
        println!("{}", x);
        let x = x + 1;
    }

字符串
如果你不像下面这样使x可变,

fn main() {
    let  x = 1;
    while x < 10 {
        println!("{}", x);
        x = x + 1;
    }
}


你会得到错误的结果
错误[E0384]:无法将两次赋值给不可变变量x

相关问题