gpt4 book ai didi

rust - Rust 如何处理阴影变量?

转载 作者:行者123 更新时间:2023-11-29 07:58:27 24 4
gpt4 key购买 nike

我有很强的 C/C++ 背景,最近正在学习 Rust。对 Rust 如何处理阴影变量感到困惑。特别是,我希望下面的代码段可以毫无问题地运行,因为 guess 在下一次在 read_line 中作为字符串调用之前从字符串隐藏为整数.

阅读 API 文档,我了解到 read_line 会将下一个输入附加到 guess。但是在隐藏之后,guess 应该被认为是一个整数并且这样的追加是无效的吗?请帮忙。

fn main() {
let secret_number = 10;
let mut guess = String::new();

loop {
//guess.clear(); // uncomment this line will make it work.
println!("Please input your guess:");
io::stdin()
.read_line(&mut guess)
.expect("Failed to read guess.");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
};
}
}

最佳答案

阴影是一种纯粹的句法现象。它对生成的代码没有影响,也就是说,如果您为每个变量选择不同的名称,生成的代码将是相同的。只是不能通过名称引用阴影变量。

特别是在您的代码中:

    let mut guess = String::new(); //1
...
loop {
io::stdin().read_line(&mut guess)... //2
let guess: u32 = match guess.trim()... ; //3
match guess.cmp(...) // 4
}
//5

第2行和第3行的用法是指第1行声明的变量,第4行的用法是指第3行的声明,变量的类型没有变化,变量的类型也没有变化一生。简单地说,它们是两个不同的变量,但恰好具有相同的名称,因此您的程序将不可能从第 4 行访问第 1 行中的变量。

事实上,在循环结束后,在第 5 行,名称 guess 将再次引用第 1 行中的变量,因为另一个超出了范围。

关于rust - Rust 如何处理阴影变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57844021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com