给定以下两个功能,如何将两个“拼合”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时,我希望使用语言思维定势来完成这项工作。
您正在寻找Result::and_then
:
fn main() {
let result = result1().and_then(result2);
println!("{:?}", result);
// Output: Ok(20)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句