如何在Rust中返回返回特性的函数



我的目标是实现一个返回另一个函数的函数,该函数返回一些特性。更具体地说,返回的函数本身应该返回Future。

要返回一个返回具体类型的函数,我们显然可以这样做:

fn returns_closure() -> impl Fn(i32) -> i32 {
|x| x + 1
}

但是,如果我们想返回一个Future而不是i32呢?

我尝试了以下方法:

use futures::Future;
fn factory() -> (impl Fn() -> impl Future) {
|| async {
// some async code
}
}

这不起作用,因为不允许使用第二个impl关键字:

error[E0562] `impl Trait` not allowed outside of function and inherent method return types

解决这个问题的最佳方法是什么?

我不知道在稳定的Rust上有什么方法可以做到这一点。然而,您可以在Rust nightly上为不透明类型(也称为存在类型(使用类型别名,如下所示(操场(:

#![feature(type_alias_impl_trait)]
use futures::Future;
type Fut<O> = impl Future<Output = O>;
fn factory<O>() -> impl Fn() -> Fut<O> {
|| async {
todo!()
}
}

相关内容

  • 没有找到相关文章

最新更新