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 }