kan*_*roo 8 comparison if-statement rust
什么时候应该std::cmp::ordering在match块中使用而不是使用if/ else if语句?可读性是唯一的区别吗?
例如:
use std::cmp::Ordering;
fn main() {
match 2.cmp(&2) {
Ordering::Less => println!("Less than 2."),
Ordering::Greater => println!("Greater than 2."),
Ordering::Equal => println!("Equal to 2."),
}
}
Run Code Online (Sandbox Code Playgroud)
与
fn main() {
if 1 < 2 {
println!("less than 2.");
} else if 1 > 2 {
println!("Greater than 2.");
} else if 1 == 2 {
println!("Equal to 2.");
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_* M. 14
可读性是唯一的区别吗?
我会说这更像是干(不要重复自己)的事情.
如果你看第二个样本,那就太乱了:
Run Code Online (Sandbox Code Playgroud)fn main() { if 1 < 2 { println!("less than 2."); } else if 1 > 2 { println!("Greater than 2."); } else if 1 == 2 { println!("Equal to 2."); } }
else条款.如果你搞砸了条件,它就什么都不做.else子句,你最好放一个assert!(1 == 2)内部来确保它只在两者相等时才采取(而不是因为你在之前的条件中犯了错误).1 < 2和之间重复1 > 2.与之相比match:
Run Code Online (Sandbox Code Playgroud)fn main() { match 2.cmp(&2) { Ordering::Less => println!("Less than 2."), Ordering::Greater => println!("Greater than 2."), Ordering::Equal => println!("Equal to 2."), } }
因此,ifvs match实际上是多个不同输出的问题:
if如果有一个或两个分支,match如果有三个分支或更多分支,请使用A match比if/ elsechain 更易于维护.
注意:我个人认为cmp很少直接使用.它更像是一个实现设备,允许您实现一个函数来获取所有4个不等式运算符.来自C++,这是一种解脱......
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |