Kotlin解包函数编译器错误

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

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

但是这样做:

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

这是因为语法歧义:

 val message = log() { message } 

这段代码被解析为val message = log() { message } ,也就是用lambda { message }作为参数调用的log 。 并且声明val message = ...具有类型Unit ,因此是错误消息。

要解决这个问题,你可以添加一个分号:

 val message = log(); { message }