Kotlin解包函数编译器错误

Eli*_*zer 4 kotlin

任何人都知道为什么以下代码不起作用?

private fun wrapLogIfNeeded(buildMessageOnCurrentThread: Boolean, log: () -> String): () -> String
  return if(buildMessageOnCurrentThread) {
    val message = log() // Type mismatch: Required () -> String Found: Unit
    { message }
  }
  else {
     log
  }
}
Run Code Online (Sandbox Code Playgroud)

但这样做:

private fun wrapLogIfNeeded(buildMessageOnCurrentThread: Boolean, log: () -> String): () -> String
  return if(buildMessageOnCurrentThread) {
    val message = lazy { log() }.value
    { message }
  }
  else {
     log
  }
}
Run Code Online (Sandbox Code Playgroud)

hot*_*key 6

这是因为语法含糊不清:

val message = log()
{ message }
Run Code Online (Sandbox Code Playgroud)

这个代码被解析,好像它是val message = log() { message },就是log用lambda { message }作为参数调用.并且语句val message = ...具有类型Unit,因此出现错误消息.

要解决它,您可以添加分号:

val message = log();
{ message }
Run Code Online (Sandbox Code Playgroud)