Kotlin: функция высшего порядка с типом возврата функции приостановки - PullRequest
0 голосов
/ 12 марта 2020

Как вернуть функцию приостановки из обычной функции? Как создать экземпляр функции приостановки?

Например, я могу вернуть asyn c результат из функции:

fun <T> f(g: () -> T): Deferred<T> = GlobalScope.async { g() }

Но я замечаю, Kotlin разрешает следующую сигнатуру функции:

fun <T> f(g: () -> T): suspend () -> T {
    TODO()
}

Как я могу это реализовать?

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

@ ответ Рене, но короче:

fun <T> f(g: () -> T) = suspend { g() }
2 голосов
/ 12 марта 2020

Один из способов сделать это:

fun <T> f(g: () -> T): suspend () -> T {
    suspend fun intern() = g()
    return ::intern
}
...