If statement 在Rust中何时使用'std::cmp::ordering'而不是'if'语句

If statement 在Rust中何时使用'std::cmp::ordering'而不是'if'语句,if-statement,rust,comparison,If Statement,Rust,Comparison,什么时候应该在match块中使用std::cmp::ordering,而不是使用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."),

什么时候应该在
match
块中使用
std::cmp::ordering
,而不是使用
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."),
    }
}
vs

fn main(){
如果1<2{
println!(“小于2”);
}否则,如果1>2{
println!(“大于2”);
}如果1==2,则为else{
println!(“等于2”);
}
}
可读性是唯一的区别吗

我想说的是,这更像是一件枯燥(不要重复)的事情

如果你看第二个样本,它很混乱:

  • 你不能偶然忘记一个案例,它保证是详尽无遗的
  • 条件只写一次,不需要“反转”它或任何东西
  • 因此,
    if
    vs
    match
    实际上是不同输出的数量问题:

    • 如果有一个或两个分支,则使用
    • 如果有三个或三个以上分支,请使用
      match
    匹配
    if
    /
    else
    链更易于维护



    注意:我个人认为
    cmp
    很少直接使用。它更像是一个实现设备,允许您实现一个函数来获取所有4个不等式运算符。来自C++的解释器……< C++ >,这是一个解脱……嗯,他们正在尝试:@ McCton,在C++中添加小工具需要几十年,而漂亮的语言在几年内就已经生锈了。这就是为什么我用C++完成了。他们可以在10年内添加任何他们想要的内容,这太晚了。我个人觉得这很难阅读,必须认真思考it@mcarton:是的。现在,我们只需要元类提案就可以自动实现它了…@Keatinge:我发现主观上更容易/更难理解,我更喜欢关注客观测量。单个条件不太可能与自身不同步。
    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.");
        }
    }
    
    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.");
        }
    }
    
    fn main() {
        match 2.cmp(&2) {
            Ordering::Less => println!("Less than 2."),
            Ordering::Greater => println!("Greater than 2."),
            Ordering::Equal => println!("Equal to 2."),
        }
    }