更简洁的选项比较
More Succinct Option Comparison
假设我有两个选项包装变量,有没有比这更好的方法来比较它们?
fn comp(a: Option<i32>, b: Option<i32>) -> bool {
match a {
Some(ai) => match b {
Some(bi) => ai == bi,
_ => false,
},
None => match b {
None => true,
_ => false,
}
}
}
我不想失去它们可能都是 None
并因此相等的情况,但这对于一个相对简单的事情来说似乎有很多匹配。我也在努力避免 unwrap()
.
实际上,如果 T: PartialEq
、Option<T>: PartialEq
和 T: Eq
、Option<T>: Eq
。请参阅此示例 (Playground):
fn main() {
assert_eq!(Some(3), Some(3));
assert_ne!(Some(3), None);
assert_eq!(None, None);
assert_ne!(Some(3), Some(4));
}
Option
s can be compared directly, so you can simply return a == b
.
假设我有两个选项包装变量,有没有比这更好的方法来比较它们?
fn comp(a: Option<i32>, b: Option<i32>) -> bool {
match a {
Some(ai) => match b {
Some(bi) => ai == bi,
_ => false,
},
None => match b {
None => true,
_ => false,
}
}
}
我不想失去它们可能都是 None
并因此相等的情况,但这对于一个相对简单的事情来说似乎有很多匹配。我也在努力避免 unwrap()
.
实际上,如果 T: PartialEq
、Option<T>: PartialEq
和 T: Eq
、Option<T>: Eq
。请参阅此示例 (Playground):
fn main() {
assert_eq!(Some(3), Some(3));
assert_ne!(Some(3), None);
assert_eq!(None, None);
assert_ne!(Some(3), Some(4));
}
Option
s can be compared directly, so you can simply return a == b
.