簡體   English   中英

如何在 Rust 中返回一個返回特征的函數

[英]How to return a function that returns a trait in 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 每晚使用不透明類型(也稱為存在類型)的類型別名:

#![feature(type_alias_impl_trait)]

use futures::Future;

type Fut<O> = impl Future<Output = O>;

fn factory<O>() -> impl Fn() -> Fut<O> {
    || async {
        todo!()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM