gpt4 book ai didi

rust - 了解范围和阴影匹配

转载 作者:行者123 更新时间:2023-11-29 07:59:00 25 4
gpt4 key购买 nike

我正在努力改进最后的 guessing game sample code一点点。特别是,我打算输出“请输入数字!”如果用户没有输入数字而不是“请输入您的猜测”。再次。我正在用一个内循环来做这件事。下面的代码确实有效:

let guess: u32;

loop {
let mut guess_str = String::new();
io::stdin().read_line(&mut guess_str)
.ok()
.expect("Failed to read line");

guess = match guess_str.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Please input a number!");
continue;
}
};
break;
}

如果可以的话,我想通过适本地隐藏匹配项来避免 guess_str。如果我将 guess_str 更改为 guess,Rust 会提示 use of possibly uninitialized variable: `guess`。如果上面的代码不可能不对变量进行初始化,我不确定该变量如何可能被取消初始化。有什么方法可以仅使用 guess 来做到这一点?

最佳答案

让我们看一个更简单的再现:

fn make_guess() -> u32 {
let guess;

{
let mut guess;
guess = 1;
}

guess
}

在这里,您创建了一个外部变量 guess,然后将其隐藏在 block 内。当您将值 1 分配给 guess 时,您正在分配给 inner 变量。 outer 变量从未设置为任何值,因此您最终会遇到“使用可能未初始化的变量”错误。

Is there any way to only use one variable

间接地,是的。我会将代码提取到一个函数中。当您猜对成功时,您可以简单地返回。否则你允许循环发生:

fn make_guess() -> u32 {
loop {
let mut guess = String::new();
io::stdin().read_line(&mut guess)
.ok()
.expect("Failed to read line");

match guess.trim().parse() {
Ok(num) => return num,
Err(_) => {
println!("Please input a number!");
}
}
}
}

这完全避免了阴影,避免了必须使用显式 continue,并为您的代码添加了少量抽象和组织。

关于rust - 了解范围和阴影匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33422543/

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