Rust 当用于分隔匹配表达式的臂时,大括号和逗号之间有什么区别?
我刚开始学习生锈,有些事情让我困惑 我读了这本书的第2章,编写了一个猜谜游戏,其中的一些代码让我想知道什么是对的,什么是错的 例如: 以下是我在中询问的一个循环:Rust 当用于分隔匹配表达式的臂时,大括号和逗号之间有什么区别?,rust,expression,Rust,Expression,我刚开始学习生锈,有些事情让我困惑 我读了这本书的第2章,编写了一个猜谜游戏,其中的一些代码让我想知道什么是对的,什么是错的 例如: 以下是我在中询问的一个循环: 循环{ ... 匹配guess.cmp(&secret\u编号){ 排序::Less=>println!(“太小!”), 排序::更大=>println!(“太大!”), 排序::相等=>{ println!(“你赢了!”); 打破 } } } 我意识到我可以写这个: 匹配guess.cmp(&secret\u编号){ 排序::Le
循环{
...
匹配guess.cmp(&secret\u编号){
排序::Less=>println!(“太小!”),
排序::更大=>println!(“太大!”),
排序::相等=>{
println!(“你赢了!”);
打破
}
}
}
我意识到我可以写这个:
匹配guess.cmp(&secret\u编号){
排序::Less=>{
println!(“太低!”)//不带分号;
}//没有逗号,
排序::更大=>{
println!(“太高了!”)
}
排序::相等=>{
println!(“你赢了!!!”);
打破
}
}
我觉得它令人困惑,我不知道它是好是错,它是否会导致未来的改变。。。
有人能帮我理解吗?如果使用大括号,则匹配臂末尾的逗号是可选的。rust解析器/标记器可以明确地解析匹配臂(带逗号或不带逗号)。逗号是可选的 任何以分号结尾的语句都是不返回任何值的语句(expect return;statement) 在第一种情况下
Ordering::Less => println!("Too small!"),
// Returns a 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
这里有一篇关于他们所做的事情的小文章evaluate@AlexLarionov谢谢,我将阅读它。它没有解释为什么我可以用代码块来分隔arm而不使用逗号。如果使用大括号,匹配arm末尾的逗号是可选的。rust解析器/标记器可以明确地解析匹配臂(带逗号或不带逗号)。看这里:逗号是可选的,这不应该是注释;答案中需要包含重要信息。正如目前所写的,这个建议的答案并没有解决被问到的问题answer@JCorriveau请注意,如果您在代码上运行
rustfmt
,它将删除块中使用的无关逗号。