相关疑难解决方法(0)

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

如果我有多个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)。我宁愿有一个更一般的功能。

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

optional rust

5
推荐指数
1
解决办法
113
查看次数

打开或继续循环

考虑一下:

loop {
    let data = match something() {
        Err(err) => {
            warn!("An error: {}; skipped.", err);
            continue;
        },
        Ok(x) => x
    };

    let data2 = match somethingElse() {
        Err(err) => {
            warn!("An error: {}; skipped.", err);
            continue;
        },
        Ok(x) => x
    };

    // and so on
}
Run Code Online (Sandbox Code Playgroud)

如果我不需要分配ok值data,我会使用if let Err(err) = something(),但是上面的代码是否有快捷方式,以避免复制粘贴Err/Ok分支,我认为,典型情况?像这样的东西if let也会返回ok值.

rust

2
推荐指数
4
解决办法
1470
查看次数

标签 统计

rust ×2

optional ×1