将期货链接到期权期货

时间:2018-10-29 17:04:51

标签: rust

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!");
}

Playground

我需要有条件地申请and_then。在该示例中,未来解析为和Option,并且只有当它不是and_then时,结果才由None传递给下一个未来。但是这样做会使匹配臂具有不兼容的类型。

一种解决方法是不使用Option并返回错误而不是None。我想知道是否还有更多惯用的选择。

0 个答案:

没有答案