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" } } 
  • Parámetros de Clase abstracta vs. Lambda
  • Kotlin: ambigüedad de resolución de sobrecarga lambda y sobrecarga
  • Expresiones de kotlin lambda como parámetro opcional
  • Obtuvo NoClassDefFoundError al pasar el map de lambda
  • Kotlin Cualquiera con lambdas
  • La expresión lambda no se usa
  • java.lang.NoClassDefFoundError $$ inlined $ forEach $ lambda $ 1 en Kotlin
  • Kotlin genera class interna para lambda
  • Kotlin: lambdas seguros (sin pérdida de memory)?
  • Java Lambda para Kotlin
  • ¿Es posible tener extensiones de function en lambdas?