gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:45:08 24 4
gpt4 key购买 nike

我什么时候应该在 match block 中使用 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."),
}
}

对比

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.");
}
}

最佳答案

Is readability the only difference?

我会说这更像是一个 DRY(不要重复自己)的事情。

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

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.");
}
}
  1. 没有 else条款。如果你搞砸了条件,它就什么都不做。
  2. 如果最后一个是else条款,你最好还是放一个assert!(1 == 2)确保仅在两者相等时才采用它(而不是因为您在之前的条件中犯了错误)。
  3. 即使那样你仍然会在 1 < 2 之间重复和 1 > 2 .

将其与 match 进行比较:

fn main() {
match 2.cmp(&2) {
Ordering::Less => println!("Less than 2."),
Ordering::Greater => println!("Greater than 2."),
Ordering::Equal => println!("Equal to 2."),
}
}
  1. 你不能不小心忘记一个案例,它保证是详尽无遗的。
  2. 条件只写一次,不需要“反转”它或任何东西。

因此,if对比match实际上是不同输出数量的问题:

  • 使用if如果有一个或两个分支机构,
  • 使用match如果有三个或更多分支机构。

A match只是比 if 更易于维护/else链。


注:我个人认为cmp很少直接使用。它更像是一个实现工具,允许您实现一个函数来获取所有 4 个不等式运算符。来自 C++,这是一种解脱......

关于if-statement - 何时在 Rust 中使用 `std::cmp::ordering` 而不是 `if` 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48094170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com