如何理解变量名可以覆盖相同的范围?

时间:2019-05-30 08:58:51

标签: rust

我已经通过

学会了Rust。

我不理解第二章中的“变量可以在同一范围内覆盖”

let guess: u32 = guess.trim().parse();

问题是:当我从let mut guess = String::new()中取出loop{}时,

从第二个循环开始,guess类型为String。而且它不能match

我尝试了不同的代码顺序。 如果我在loop {}中加入可靠的声明,它就可以工作。

完整的正确代码是:

loop {
    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin().read_line(&mut guess)
        .expect("Failed to read line");

    let guess: u32 = match guess.trim().parse() {
        Ok(num) => num,
        Err(_) => continue,
    };
}

我知道在Rust中,我们可以在同一范围内再次声明变量,

它可能涵盖了origin变量。

但是在第二个循环中,guess可能是类型u32,为什么它仍然是字符串?

如果它是String,则表示该变量已被破坏,

因为它没有被销毁,它可能仍然是u32类型

但是,它是String,它仍然存储我之前输入的输入。

我猜:在Rust中,变量没有被破坏,

let guess: u32 = guess.trim().parse();之前,类型为String

let guess: u32 = guess.trim().parse();之后,类型为u32

是真的吗?非常感谢。

0 个答案:

没有答案