我刚开始学习 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?
}
}
match
, if
, loop
,以及其他具有{}
Rust 编译器对块进行了特殊处理。当这些表达式出现时表达式语句 https://doc.rust-lang.org/reference/statements.html#expression-statements, 那是,not作为更大表达式的一部分,并且具有该块的表达式的类型是()
,你不必把;
在它之后将其与后面的语句分开。
表达式语句并非如此without块,它始终必须与以下语句(如果存在)分隔开;
,即使他们的类型是()
.
因为这个规则的存在,这在 Rust 中很常见not to put ;
after match
, if
, unsafe
等,当它们仅用于副作用时,或之后for
and while
循环(始终仅用于副作用,因为它们总是返回()
).
也就是说,rustfmt 和 Clippy 似乎都可以接受额外的功能;
,因此,如果您出于美观原因更喜欢它,那么您不太可能通过使用它来冒犯任何人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)