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" } } 
  • Tipo de function de Kotlin en su lugar interfaz funcional lambda
  • Kotlin y Jack no son compatibles (Android Studio 2.3.2)
  • Usar interfaces funcionales con types de funciones en Kotlin
  • kotlin cómo referir el scope externo esto en funciones de aplicación multicapa
  • ¿Cómo crear una instancia de interfaz anónima en Kotlin?
  • Expresiones de kotlin lambda como parámetro opcional
  • Kotin Cómo especificar la label de devolución cuando se incluye en Lambda
  • Kotlin no puede acceder a kotlin.jvm.functions.Function1 cuando llama a la function kotlin con java lambda
  • Reescriba el código de Java en Kotlin utilizando la reference de function.
  • ¿Es posible ocultar variables del cierre de lambda?
  • Función anónima asincrónica en Kotlin? (expresiones lambda)