Функция Котлина: Требуемая единица измерения? Найдено Int

Неоднократно сталкивается с этой проблемой в Котлине

fun test(){ compute { foo -> Log.e("kotlin issue", "solved") } // This line is //showing error } fun compute(body: (foo:String) -> Unit?){ body.invoke("problem solved") } 

Я получаю сообщение об ошибке в Studio. Вот скриншот. введите описание изображения здесь

Solutions Collecting From Web of "Функция Котлина: Требуемая единица измерения? Найдено Int"

Лямбда, которую вы передаете функции compute , должна возвращать Unit? , Прямо сейчас вы возвращаете результат Log.e() , который возвращает Int представляющий количество байтов, записанных на выход. Если все, что вы хотите сделать, это зарегистрировать сообщение в лямбда, вы можете явно вернуть Unit в конце его так:

 fun test() { compute { foo -> Log.e("kotlin issue", "solved") Unit } } 

Также см. Этот вопрос, где обсуждаются другие способы преобразования возвращаемого значения в Unit .

Android Log.e возвращает Int где в качестве параметра body указано, что тип возвращаемого значения должен быть Unit? ,

Вам нужно либо сменить сигнатуру метода compute так:

 fun compute(body: (foo: String) -> Unit) { body.invoke("problem solved") } 

Или измените вызов так:

 compute { foo -> Log.e("kotlin issue", "solved"); null } 

Или завершите вычисление, чтобы изменить вызов:

 fun myCompute(body: (foo: String) -> Any?) { compute { body(it); null } } 

а затем вызовите его, как вы ожидаете:

 myCompute { foo -> Log.e("kotlin issue", "solved") }