选择第一个 Some() 选项的惯用方式?

ilm*_*moi 5 optional rust

如果我有多个Option<T>' 并且我想选择第一个Some而不是None- 有没有一种惯用的方法来做到这一点?

我天真的方法:

pub fn pick_first_option_available<T>(a: Option<T>, b: Option<T>, c: Option<T>) -> Option<T> {
    match a {
        Some(a) => Some(a),
        None => match b {
            Some(b) => Some(b),
            None => match c {
                Some(c) => Some(c),
                None => None,
            },
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

上述的一个明显问题是它仅限于固定数量的选项 (3)。我宁愿有一个更一般的功能。

有一个有点相关的线程在这里,但它铲球总结采摘选项来代替。

Den*_*ret 12

是的,有一种简单而惯用的方法:

a.or(b).or(c)
Run Code Online (Sandbox Code Playgroud)

您通常不会为此定义一个函数。

选项#或