目前我使用这种模式:
let a: Result<A, ParseError> = parseA();
let b: Result<B, ParseError> = parseB();
let c: Result<C, ParseError> = parseC();
a.and_then(|a| b.map(|b| (a, b))).and_then(|(a,b)| c.map(|c| {
// finally the crux of what I want to do
a.foo(b).bar(c)
}))
是否有更简洁的方式来定义a
,b
&amp; c
,例如Scala for-expression?
答案 0 :(得分:3)
我通常将所有内容包装在图层中,而不是通过元组链接:
find -type d -exec ls -td1 {} \; | tail -n +15
或者,在最近的Rust版本中,您可以精心使用let result = a.and_then(|a| {
b.and_then(|b| {
c.map(|c| {
a.foo(b).bar(c)
})
})
});
运算符:
?
Closures允许您安全而安全地完成此操作。
当然,如果要将中间let result = a.and_then(|a| {
a.foo(b?).bar(c?)
});
存储在变量中,这不起作用。