Kotlin: Declaración a Lambda

¿Cómo puedo hacer una statement de Kotlin a lambda?

Sé que puedes hacer eso:

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

¿También es posible crear un lambda anónimo sin las llaves {...} ?

En particular, en una statement de interruptor, la forma habitual con llaves no se ve bien.

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

¡Esperamos su respuesta!

Las llaves son la syntax para una expresión lambda, no puedes crear una sin ellas.

En una instrucción when , puede darle a su twig un cuerpo de bloque y devolver la lambda como su última expresión, o puede hacer que una sola twig de expresión devuelva una lambda envolviéndola entre paréntesis (de lo contrario, se interpretaría como una twig que ejecuta el código dentro de las llaves):

 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") }) } 

Si no te gusta ni {{ ni ({ de la respuesta de zsmb13, puedes hacer que se vea un poco mejor definiendo una function bastante trivial:

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

Esto es sin llaves y se ve mejor.

 fun getDayType(day: String): String { return when (day) { "SATURDAY" -> "Half Day" "SUNDAY" -> "Holyday" else -> "running day" } } 
  • nulo o vacío lambda como valor pnetworkingeterminado
  • Kotlin: ¿Cómo puedo invocar un campo lambda que tiene un tipo genérico de su class?
  • Disruptor LMAX con Kotlin: ¿No se puede usar lambda?
  • Pasar funciones a funciones en Kotlin
  • La function de extensión de kotlin no entiende cómo funciona esto
  • Comparador como lambda
  • Kotin Cómo especificar la label de devolución cuando se incluye en Lambda
  • ¿Cómo usar la expresión Lamba para hacer que las llamadas al método Java sean less detalladas en Kotlin?
  • Funciones de Lambda con comodines en Kotlin
  • Kotlin - Cómo recursivamente llamar a una function lambda
  • ¿Por qué Kotlin no puede inferir el siguiente argumento lambda (después de la conversión de Java -> Kotlin)?