我按照 Rust Book 第 2 章编写了以下程序。
在这里,我真的很喜欢 match
关键字
#1
use std::io;
use std::cmp::Ordering;
use rand::Rng;
fn main() {
println!("Guess A Number");
let secret_number = rand::thread_rng().gen_range(1, 101);
loop {
println!("Enter the Number:");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Unable to Read the Input");
//The following snippet of code
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Not A Number, Try Again");
continue;
}
};
//end
println!("Your Guess {}", guess);
match guess.cmp(&secret_number) {
Ordering::Greater => println!("Too Big"),
Ordering::Less => println!("Too Small"),
Ordering::Equal => {
println!("You Win");
break;
}
}
}
}
所以我在做第 3 章末尾给出的问题时使用了 match
语句。
#2:
use std::io;
fn main() {
println!("Enter the number:");
let mut term = String::new();
io::stdin()
.read_line(&mut term)
.expect("\nFailed to Read");
//The following snippet
let term: u32 = match term.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Input Not a Number");
continue;
}
};
//end
}
但是在#2中,编译器给出了以下错误:
mismatched types
expected `u32`, found `()`
还有以下错误
`continue` outside of a loop
我真的不明白为什么我会收到这个错误。可能是新手错误。
请告诉我我的错误。
谢谢
编辑器:VS Code
扩展:rust-lang、rust-analyzer
答案 0 :(得分:0)
类型不匹配错误是因为term
的类型明确指定为u32,第一个匹配臂隐式返回u32,而第二个匹配臂返回单位值()
。退出匹配表达式的方法只有几种,在这里你要么需要返回一个 u32(你可能不想这样做),要么你可以调用 return 退出函数,或者调用 panic!( ) 终止程序。 continue 关键字只能在循环内使用,但不能匹配。不幸的是,没有与 C switch 语句中的 break
等效。
如果你不想马上从函数中返回,你可以重写这个来存储 parse() 返回的 Result