Котлин: заявление Лямбде

Как я могу сделать заявление Котлина на лямбда?

Я знаю, что вы можете это сделать:

fun foo() : () -> Unit { return { println("Hello World") } } //more beautiful: fun foo() : () -> Unit = { println("Hello World") } 

Возможно ли создать анонимную лямбду без фигурных скобок {...} ?

В частности, в инструкции switch обычный способ с фигурными скобками выглядит не очень хорошо.

 fun bar(i: Int) : () -> Unit { return when (i) { 0 -> { { println("Hello") } } 1 -> { { println("World") } } else -> { { println("Bye") } } } } 

Ждем вашего ответа!

Кудрявые фигурные скобки являются синтаксисом для выражения лямбда, вы не можете создать один без них.

В выражении when вы можете либо дать своей ветке тело блока, либо вернуть лямбду в качестве своего последнего выражения, либо вы можете, чтобы одна ветвь выражения возвращала лямбда, завернув ее в круглые скобки (иначе она будет интерпретироваться как ветвь, выполняет код внутри фигурных скобок):

 when (x) { "block body returning an Int" -> { // do stuff 25 } "block body returning a lambda" -> { // do stuff { println("Hello") } } "single expression returning an Int" -> 25 "single expression returning a lambda" -> ({ println("Hello") }) } 

Если вам не нравится ни {{ nor ({ от ответа zsmb13, вы можете сделать это немного лучше, определив довольно тривиальную функцию:

 fun <A> lambda(x: A) = x // usage return when (i) { 0 -> lambda { println("Hello") } 1 -> lambda { println("World") } else -> lambda { println("Bye") } } 

Это без фигурных скобок и выглядит лучше.

 fun getDayType(day: String): String { return when (day) { "SATURDAY" -> "Half Day" "SUNDAY" -> "Holyday" else -> "running day" } } 
  • Kotlin - Незаконное использование обратного вызова встроенного параметра
  • Как проверить лямбда-пустоту в котлине
  • Ошибка при смене лямбды для плоской карты из двух наблюдений на плоскую карту двух синглов
  • Асинхронная анонимная функция в Котлине? (лямбда-выражения)
  • Выражение лямбда не используется
  • Kotlin - Список в списке фильтрации
  • конвертировать компаратор в лямбда в Котлин
  • Kotlin: Используйте лямбда вместо функционального интерфейса?
  • Как опустить параметры лямбда в Котлин?
  • Лямбда-тип с переменным числом аргументов в Котлине?
  • Котлин: лямбда никогда не компилируется
  • Interesting Posts

    Ссылка на метод конкретного экземпляра в Котлине

    CollapsingToolbarLayout показывает сломанное название при свертывании

    Самый простой способ получить возможность hotswap при использовании транспилера kotlin-to-js?

    TornadoFX Обновление ItemViewModel, если объект Backing, не отображающий свойства JavaFX, изменен

    Как создать карту из списка с помощью внутреннего списка с помощью Kotlin

    Получить ClassLoader из gradle org.gradle.api.Project?

    Kotlin – Как «запоздать» var переопределил интерфейс?

    Как получить страну пользователя для HTTP-запроса в бэкэнд?

    Преобразуйте MainActivity с помощью панели действий / панели инструментов и кнопки с плавающей точкой в ​​Anko

    Kotlin только для чтения свойство с и без getter

    В тестовом пакете не читаются классы Котлина, определенные в основном пакете

    Как синтетически добавить активность в задний стек перед началом другого?

    Пояснение к литералу функции с приемником в Котлине

    Подкласс Kotlin – RecyclerView.ViewHolder – не может получить доступ к дополнительной собственности

    Как создать полный экран активности в android программно с помощью kotlin.

    Давайте будем гением компьютера.