了解kotlin执行者

Raf*_*iva 2 java executor kotlin

我理解执行者的概念,但我在理解kotlin中的执行者时遇到了一些麻烦.也许它的语法无济于事.

我们来看下面的例子:

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

如果我理解正确,遗嘱执行人( () -> Unit ) -> Unit是关闭的船只.要执行的代码块.我不确定这是否属实,或者它只是一个匿名函数的容器.

另一件事是,有人可以解释语法:( () -> Unit ) -> Unit

我已经阅读了kotlin文档,阅读kotlin源代码并试图谷歌它但我真的很难理解这一点.谢谢

JB *_*zet 9

() -> 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)
}
Run Code Online (Sandbox Code Playgroud)

请注意,我自己还在学习Kotlin,所以我仍然在努力学习语法和概念.