挂起函数引用作为 let 的参数获取错误

Suspend function reference as parameter of let gets error

为什么Kotlin不能引用suspend函数作为let/also等函数的参数?

class X

fun a(x: X) {}
suspend fun b(x: X) {}

X().let(::a)
X().let(::b) // Error: Type mismatch

您只能从协程或其他挂起函数中调用 suspend 函数。 并且let没有将挂起函数作为参数。

public inline fun <T, R> T.let(block: (T) -> R): R 

与任何其他类型一样,函数声明必须匹配。将挂起函数传递给另一个不接受挂起函数的函数将不起作用。

当你有这样的函数时它会起作用:

这只是一个例子,没有用于打印日志的挂起函数的实际用例!

suspend inline fun log(block: suspend () -> String) {
    val message: String = block() // we assume block takes some time to be computed
    return println(message) // once its available, we print it
}

您可以像这样使用 log 函数:

suspend fun complexError(): String {
  // takes time to compute...
  return "message"
}

// usage
suspend fun errorHandling() {
  log(::complexError) // pass a reference to complexError()

  // or
  log() { complexError() }
}