了解科特林执行者
Understanding kotlin executors
我理解执行者的概念,但我在理解 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 源代码并尝试 google 它,但我真的很难理解这一点。谢谢
() -> Unit
是一个不接受任何参数的函数,returns 也不接受任何参数。比如Runnable.run()
就是这样一个函数。可以把这样的功能看做任务
所以,(() -> Unit) -> Unit
是一个将这样的函数作为参数的函数,而 returns 什么都没有。比如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)
}
请注意,我自己仍在学习 Kotlin,所以我仍然在语法和概念上挣扎。
我理解执行者的概念,但我在理解 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 源代码并尝试 google 它,但我真的很难理解这一点。谢谢
() -> Unit
是一个不接受任何参数的函数,returns 也不接受任何参数。比如Runnable.run()
就是这样一个函数。可以把这样的功能看做任务
所以,(() -> Unit) -> Unit
是一个将这样的函数作为参数的函数,而 returns 什么都没有。比如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)
}
请注意,我自己仍在学习 Kotlin,所以我仍然在语法和概念上挣扎。