Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

308
Views
¿Por qué las funciones de Kotlin Lambda no se ejecutan cuando se las llama?

En el siguiente código tengo 2 funciones: la primera envuelta en un cuerpo lambda y la otra sin él.

 fun first() = { println("first")} fun second() = println("second") first() second()

Solo las second() imprimen: ¿por qué es esto?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La primera es una función que devuelve una función. Lo que sucede de hecho es que first() devuelve otra función que imprime "primero", pero no la ejecuta.

Para hacer esto, debe llamarlo agregando otro conjunto de paréntesis:

 first()() // Or val resultOfFirst = first() resultOfFirst()

Esto sucede porque el signo = para las funciones es análogo a una declaración de devolución y cuando envuelve las cosas en {} , de hecho, está creando una lambda. Por lo tanto, primero devuelve una lambda, pero no la ejecuta.

over 4 years ago · Santiago Trujillo Report

0

La función first devuelve una función { println("first")} .

Llamar first() no hace nada, ni siquiera se captura su argumento de retorno.

Sin una lambda sería un equivalente, tal vez sea más fácil de entender de esta forma:

 fun firstWithoutLambda() = fun() { println("first w/o lambda")}

Para llamarlos:

 first().invoke() firstWithoutLambda().invoke()

que imprimirá los mensajes que esperaría.

Del tutorial original de Kotlin, un buen artículo: https://kotlinlang.org/docs/reference/lambdas.html

over 4 years ago · Santiago Trujillo Report

0

Es muy sencillo. Verifique los tipos de esos:

 fun first(): () -> Unit = { println("first") } fun second(): Unit = println("second")

Entonces, cuando llamas first , obtienes la expresión lamda. Para invocar esta función, use .invoke() (o simplemente () ):

 first().invoke() // or first()()

El segundo es obvio: se ejecuta en la llamada.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!