Ошибка компилятора функции Unfrapping 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 } , то есть log вызванный с lambda { message } качестве аргумента. И оператор val message = ... имеет тип Unit , поэтому сообщение об ошибке.

Чтобы решить эту проблему, вы можете добавить точку с запятой:

 val message = log(); { message }