更简洁的选项比较

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: PartialEqOption<T>: PartialEqT: EqOption<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));
}

Options can be compared directly, so you can simply return a == b.