Comprender los ejecutores kotlin

Entiendo el concepto de ejecutores, pero estoy teniendo problemas para entender ejecutores en kotlin. Tal vez es la syntax que no ayuda.

Veamos el siguiente ejemplo:

private class AlwaysCallback(private val executor: (() -> Unit) -> Unit, private val cb: Progress.() -> Unit) : Callback { override fun execute(progress: Progress) { executor { progress.cb() } } } 

Si entendí correctamente, un ejecutor ( () -> Unit ) -> Unit es un buque para un cierre. Un bloque de código que se debe ejecutar. No estoy seguro de si esto es cierto o es solo un recipiente para una function anónima.

Otra cosa es, ¿podría alguien explicar la syntax: ( () -> Unit ) -> Unit ?

He leído la documentation de kotlin, he leído el código fuente de kotlin y he intentado searchlo en Google, pero realmente estoy luchando por comprenderlo. Gracias

() -> Unit es una function que no toma nada como argumento, y no devuelve nada. Por ejemplo, Runnable.run() es una function de este tipo. Puedes ver tal function como una tarea.

Entonces, (() -> Unit) -> Unit es una function que toma una function como argumento y no devuelve nada. Por ejemplo, Executor.execute(Runnable) es una function de este tipo. Por lo tanto, es una function que toma una tarea como argumento (lo más probable es que ejecute esa tarea, ahora, más tarde, una o varias veces).

Aquí hay un ejemplo que define una function que crea lo que acabo de llamar una tarea, y otra function que devuelve un ejecutor, es decir, una function que ejecuta la tarea:

 fun createTask(): () -> Unit { return { println("Hello world") } } fun createExecutor() : (() -> Unit) -> Unit { return { task: () -> Unit -> println("I'm going to execute the task...") task() println("I'm going to execute the task a second time...") task() } } fun main(args: Array<String>) { val task = createTask() val executor = createExecutor() executor(task) } 

Tenga en count que todavía estoy aprendiendo Kotlin, por lo que todavía tengo problemas con la syntax y los conceptos.

  • Dibuja una línea en el canvas lentamente como una animation
  • Obtener una instancia de subcomponente en una actividad
  • cómo escribir "->" eficiente en Android Studio
  • ¿Cómo se configura una construcción multiplataforma de Kotlin?
  • Joda DateTime Timezone no aparece correctamente
  • Enfoque correcto para la class de Kotlin inyectada de constructor inmutable
  • FragmentTransaction no comstackrá en Kotlin Android Project
  • ¿Es posible anular Java getter (método) con Kotlin val (propiedad)?
  • DoubleClick utiliza Kotlin programáticamente frente a la emisión val no se puede reasignar
  • No se puede inicializar el button en el dialog en Kotlin
  • Error de falta de coincidencia del tipo Kotlin al pasar los arguments desde la terminal