Ошибка компилятора функции 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 } 
Intereting Posts
При обработке аннотаций произошла некоторая ошибка (ошибки) Плагин Intellij Idea: что вызывает вызов метода для решения ссылки Kotlin Как отсортировать LinkedHashMap по значениям в Kotlin? Как исправить инициализацию поля val с помощью прокси-сервера Spring Security? Как десериализовать унаследованные классы данных Kotlin с помощью Gson Функция инициализации массива Котлина Объединение данных из разных Observables и выбор различных стратегий получения, в зависимости от доступности данных Карта Котлина: почему нет toHashMap ()? java.lang.NoSuchMethodException при попытке запуска приложения TornadoFX где поставить скрипт, который запускается во всех / некоторых действиях в android? MultiAutoCompleteTextView не завершает фильтрацию Ошибка: ошибка преобразования байт-кода в dex: причина: метод по умолчанию или статический интерфейс, используемый без –min-sdk-version> = 24 В чем разница между Foo :: class.java и Foo :: javaClass? RXJava Игнорировать ошибку и продолжить цепочку Как уведомить Observable при завершении CountdownTimer