Понимание исполнителей kotlin

Я понимаю концепцию исполнителей, но у меня есть некоторые проблемы с пониманием исполнителей в котлин. Может быть, синтаксис не помогает.

Давайте посмотрим на следующий пример:

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

Если я правильно понял, исполнитель ( () -> Unit ) -> Unit – это судно для закрытия. Блок кода, который должен быть выполнен. Я не уверен, что это правда, или это просто судно для анонимной функции.

Другое дело, может кто-нибудь объяснить синтаксис: ( () -> Unit ) -> Unit ?

Я прочитал документацию kotlin, прочитал исходный код kotlin и попытался это сделать, но я действительно пытаюсь это понять. спасибо

() -> Unit – это функция, которая ничего не принимает в качестве аргумента и ничего не возвращает. Например, Runnable.run() является такой функцией. Вы можете видеть такую ​​функцию как задачу.

Итак, (() -> Unit) -> Unit – это функция, которая принимает такую ​​функцию как аргумент и ничего не возвращает. Например, Executor.execute(Runnable) является такой функцией. Таким образом, это функция, которая принимает задание как аргумент (скорее всего, для выполнения этой задачи, теперь, позже, один или несколько раз).

Вот пример, который определяет функцию, создающую то, что я только что назвал задачей, и другую функцию, возвращающую исполнителя, то есть функцию, выполняющую задачу:

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

Заметьте, что я все еще сам изучаю Котлин, поэтому я все еще боюсь синтаксиса и понятий.

Interesting Posts

Смыкая функцию расширения в Котлине

Как указать начальную задержку для периодического задания Android с помощью JobScheduler?

Kotlin – Коллекция карт сортировки

android.R.id просмотр привязки в Котлине

Попытка исключить поле при сохранении класса данных kotlin в качестве документа в Google Cloud Firestore

Ссылка Int :: class.javaPrimitiveType.kotlin не равна Int :: class.javaObjectType.kotlin

Пакет 2.2 для Android Studio RC2

Каковы преимущества языка программирования Kotlin?

Ошибка при загрузке приложения IBM Bluemix Cloud Foundry SpringBoot

как присоединиться к двум таблицам в android, используя метод запросов поставщика контента?

GL_INVALID_OPERATION на glBufferData () в kotlin

Retrofit2 + SimpleXML в Kotlin: MethodException: аннотация должна отмечать набор или метод get

Python vars () в Котлине

Kotlin kotlinClass.class.getName () не может вернуть имя пакета, но только простое имя класса

Разрешены только безопасные или неаудированные звонки, разрешенные для нулевого типа приемника arraylist

Давайте будем гением компьютера.