检查结果中选项内的值是否满足 Rust 条件的最佳方法是什么?

问题描述 投票:0回答:1

我有一个返回类似

Result<Option<Value>, Error>
之类的函数,我想检查是否有一个值以及它是否与条件匹配。有两种简单的方法:

if let Ok(Some(value)) = func() {
    if /* condition */ {
        /* do something */
    }
}

if func().is_ok_and(|option| option.is_some_and(|value| /* condition */ )) {
    /* do something */
}

第一个对我来说似乎更具可读性,但在某些情况下,我可以想象出现很多嵌套。第二种可读性较差,并且引入了极长的行,但可以防止过度嵌套。其中一个比另一个更可取吗?或者还有其他我不知道的更简单的方法吗?

类似于这个github问题中讨论的内容将会非常有帮助,通过这样做:

if let Ok(Some(value)) = func() && /* condition */ {
    /* do something */
}

防止过度嵌套并保持可读性,但我发现目前 Rust 中没有类似的功能。

rust option-type
1个回答
0
投票

在不滥用

Result
Option
上的方法的情况下,一种非常干净的方法就是
match
:

match value {
    Ok(Some(x)) if /* condition */ => { /* do something */ },
    _ => {}
}
© www.soinside.com 2019 - 2024. All rights reserved.