【问题标题】:Kotlin: Higher-order function with Suspend Function return typeKotlin:具有 Suspend Function 返回类型的高阶函数
【发布时间】:2020-03-12 06:54:24
【问题描述】:

如何从常规函数返回挂起函数?如何创建挂起函数实例?

例如,我可以从函数返回异步结果:

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

但我注意到 Kotlin 允许以下函数签名:

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

我该如何实现它?

【问题讨论】:

    标签: asynchronous kotlin coroutine kotlin-coroutines suspend


    【解决方案1】:

    @Rene 的回答,但更短:

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

    【讨论】:

      【解决方案2】:

      一种方法:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        相关资源
        最近更新 更多