如何展平两个结果

ademar111190

给定以下两个功能,如何将两个“拼合”Result为一个?

fn result1() -> Result<u8, String> {
  Ok(10)
}

fn result2(number: u8) -> Result<u8, String> {
  Ok(number * 2)
}

因此,运行以下代码:

fn main() {
    let result = result1().map(|number| result2(number));
    println!("{:?}", result);
    // Output: Ok(Ok(20))
}

我得到与此代码相同的结果:

fn main() {
    let result = result1().map(|number| number * 2);
    println!("{:?}", result);
    // Output: Ok(20)
}

注意嵌套的OkOk(Ok(20))而不是正确的单个Ok Ok(20)

与我正在寻找的东西相似的是Rx flatmap,但是当我学习rust时,我希望使用语言思维定来完成这项工作。

Kitsu

您正在寻找Result::and_then

fn main() {
    let result = result1().and_then(result2);
    println!("{:?}", result);
    // Output: Ok(20)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章