如果多个选项之一为无,则返回Ok(None)的惯用方法是什么,否则打开所有选项?

我有一个函数,返回Result<Option<[type]>>上一个Input类型:

pub struct Input {
    a: Option<i32>,
    b: Option<i32>,
    c: Option<i32>,
}

对于每个字段,input如果值为None,函数将立即返回Ok(None),如果有值,函数将解包它并继续执行进一步的逻辑:

fn process(input: Input) -> std::io::Result<Option<i32>> {
    let a = match input.a {
        Some(a) => a,
        None => return Ok(None),
    };
    // the same for b and c...
    todo!()
}

对于输入类型中的所有字段重复相同的模式。有没有更漂亮的方式来表达这一点?

回答

您可以使用 aif let一次分配所有变量并Ok(None)else分支中返回:

fn process(input: Input) -> std::io::Result<Option<i32>> {
    if let (Some(a), Some(b), Some(c)) = (input.a, input.b, input.c) {
        todo!();
    } else {
        return Ok(None)
    }
}

游乐场链接

编辑:或者,更简洁(感谢 Dietrich Epp 的建议!):

fn process(input: Input) -> std::io::Result<Option<i32>> {
    if let Input {
        a: Some(a),
        b: Some(b),
        c: Some(c),
    } = input
    {
        todo!();
    } else {
        return Ok(None);
    }
}

游乐场链接


以上是如果多个选项之一为无,则返回Ok(None)的惯用方法是什么,否则打开所有选项?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>