我正在研究将协程代码作为launchblock: suspend CoroutineScope.() -> Unit协程生成器。我们通常将代码作为lambda传递。但是,我想知道如何将此函数作为显式参数传递给启动函数。

coroutineScope {
    launch(block = ::myFunction)
}

suspend fun CoroutineScope.myFunction(): Unit {
    // coroutine code
}

它给出以下错误
Type mismatch.
Required:
suspend CoroutineScope.() → Unit
Found:
KSuspendFunction0<Unit>

我想念的是什么?

最佳答案

扩展函数引用的语法与成员函数的语法相同:

launch(block = CoroutineScope::myFunction)

09-11 19:34