extern crate futures; // 0.1.25
use futures::Future;
fn another_future(a: u8) -> impl Future<Item=u8, Error=()> {
println!("a is {}", a);
futures::future::ok(a)
}
fn example() -> impl Future<Item=(), Error=()> {
futures::future::ok(Some(127))
.and_then(|opt| {
if opt.is_some() {
match opt {
Some(n) => {
another_future(n).and_then(|n| {
Ok(())
})
},
None => {
// i really don't want to call another
// what to put in this branch to make the type check?
},
}
})
}
fn main() {
println!("Hello, world!");
}
我需要有条件地申请and_then
。在该示例中,未来解析为和Option
,并且只有当它不是and_then
时,结果才由None
传递给下一个未来。但是这样做会使匹配臂具有不兼容的类型。
一种解决方法是不使用Option
并返回错误而不是None
。我想知道是否还有更多惯用的选择。