我刚开始学习 Rust,我经常有一些我找不到任何答案的问题。我真的不知道如何以及在哪里发布我的问题,所以我会尝试。
我开始阅读网站上的 Rust 文档,并做了猜谜游戏示例。
我意识到match cmp循环内的表达式可以变成一个语句,一切仍然有效。所以我想知道为什么和哪个版本应该是首选?
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1, 101);
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,
};
println!("You guessed: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
} // <=== here should it be ended as statement (;) or not?
}
}
Run Code Online (Sandbox Code Playgroud)
matchRust 编译器会特别处理、if、loop和其他具有块的表达式。当这些表达式作为表达式语句{}出现时,即不作为较大表达式的一部分,并且具有块的表达式的类型为 时,您不必在其后面放置以将其与后面的语句分开。();
对于不带块的表达式语句,情况并非如此,它始终必须与后面的语句(如果存在)分隔开;,即使它们的类型是()。
因为这条规则存在,所以在 Rust 中,当它们仅用于副作用时,通常不要放在;after match、if、unsafe等之后,或者 afterfor和while循环(它们始终仅用于副作用,因为它们总是返回())。
也就是说,rustfmt 和 Clippy 似乎都对 extra 很满意;,所以如果你出于美观原因更喜欢它,那么你不太可能通过使用它来冒犯任何人。
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |