我刚刚开始学习 Rust,有些事情让我感到困惑。
我读了《编程猜谜游戏》这本书的第二章,代码的某些部分让我想知道什么是对的,什么是错的。
示例: 这是我在 another question 中询问的一个循环:
loop {
...
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
}
}
我意识到我可以这样写:
match guess.cmp(&secret_number) {
Ordering::Less => {
println!("Too low!") // without semicolon ;
} // without comma ,
Ordering::Greater => {
println!("Too high!")
}
Ordering::Equal => {
println!("You win!!!");
break;
}
}
我觉得这很令人困惑,我不知道这是好还是错,是否会导致 future 的重大变化...... 谁能帮我理解一下吗?
最佳答案
如果使用大括号,则匹配臂末尾的逗号是可选的。 rust 解析器/分词器可以明确解析带或不带逗号的匹配臂。 Look here:逗号是可选的。
任何以分号结尾的语句都是不返回任何值的语句(期望 return <>; 语句)。
在第一种情况下,
Ordering::Less => println!("Too small!"),
// Returns a unit value
在第二种带有大括号的情况下,将返回不带分号的最后一行。在本例中,它是 unit value.
请参阅此示例:
let flag = false;
let result = match flag {
false => {
println!("in false arm");
100
},
true => {
println!("In true arm");
200
}
};
println!("result = {}", result);
这将打印以下内容:
in false arm
result = 100
关于rust - 当用于分隔匹配表达式的分支时,大括号和逗号之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62103616/