如果多个选项之一为无,则返回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);
}
}
游乐场链接
THE END
二维码