gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:39:14 28 4
gpt4 key购买 nike

我有一个返回 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!()
}
对输入类型中的所有字段重复相同的模式。有没有更漂亮的方式来表达这一点?

最佳答案

您可以使用 if 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)
}
}
Playground link
编辑:或者,更简洁(感谢 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);
}
}
Playground link

关于rust - 如果多个选项之一为无,则返回 Ok(None) 的惯用方法是什么,否则打开所有选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68273684/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com