Как вернуть функцию, которая возвращает черту в Rust - PullRequest
2 голосов
/ 26 марта 2020

Моя цель - реализовать функцию, которая возвращает другую функцию, которая возвращает некоторую черту. Чтобы быть более точным c, возвращаемая функция должна сама возвращать Future.

Чтобы вернуть функцию, которая возвращает конкретный тип, мы, очевидно, можем сделать это:

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

Но что если вместо i32 мы хотим вернуть Future?

, я попробовал следующее:

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

Как лучше всего решить эту проблему?

1 Ответ

1 голос
/ 27 марта 2020

Я не знаю, как это сделать на стабильном 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!()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...