我已经通过
我不理解第二章中的“变量可以在同一范围内覆盖”
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
是真的吗?非常感谢。