在Rust未来的特征中,'静态生命周期意味着什么?

时间:2018-01-29 14:56:29

标签: rust lifetime rust-tokio

我认为我已经获得'static生命周期的内容,但现在我不确定。

我试图了解如何使用Tokio和Futures。我的应用程序正在运行,但结构很糟糕,所以我需要分解它。我的关闭需要'static,我不知道如何解决。

例如,在main函数中,我有一个句柄,能够spawn未来的循环:

let mut core = tokio_core::reactor::Core::new().unwrap();
let handle = core.handle();
let future = {
    ok(())
};

它汇编;现在我想移出一些逻辑:

struct Test;
impl Test {
    fn test(&self, handle: tokio_core::reactor::Handle) {
        let future = {
            ok(())
        };
        handle.spawn(future);
    }
}

它也编译。当我的结构变得更复杂时:

struct Test<'a> {
    api: &'a Arc<Api>,
}

impl<'a> Test<'a> {
    fn new(api: &'a Arc<Api>) -> Self {
        Test {
            api: api,
        }
    }

    fn test(&self, msg: &telegram_bot::types::Message, handle: tokio_core::reactor::Handle) {
        let api = self.api.clone();
        let future = ok(10);
        let future2 = move |x| {
            api.send(msg.text_reply(format!("reply: {}", x))) // returns Future
        }.map(|_| ()).map_err(|_| ()); // let's ignore the results for now
        handle.spawn(future.and_then(future2));
    }
}

......我遇到了

error[E0477]: the type `futures::AndThen<futures::FutureResult<i32, ()>, futures::FutureResult<(), ()>, [closure@src/main.rs:63:23: 66:10 api:std::sync::Arc<telegram_bot::Api>, msg:&telegram_bot::Message]>` does not fulfill the required lifetime
handle.spawn(future.and_then(future2));
       ^^^^^
note: type must satisfy the static lifetime

我认为它对我的关闭大吼大叫。如果我在main函数中使用Arc&#39; ed Api,则可以使用相同的未来。

将其移动到一个带有引用的结构,例如一个单独的&#34;处理器&#34;用'static错误打破它。

0 个答案:

没有答案