【问题标题】:Understanding kotlin executors了解 kotlin 执行器
【发布时间】:2015-11-06 17:30:44
【问题描述】:

我理解 executors 的概念,但我在 kotlin 中理解 executors 时遇到了一些麻烦。也许是语法没有帮助。

让我们看下面的例子:

     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 源代码并尝试用谷歌搜索,但我真的很难理解这一点。谢谢

【问题讨论】:

  • 抱歉,您想达到什么目的?你能解释一下或给出一个有效的 Java 代码吗?

标签: java kotlin executor


【解决方案1】:

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

请注意,我自己还在学习 Kotlin,所以我仍然在语法和概念上苦苦挣扎。

【讨论】:

  • 单位解释如下:kotlinlang.org/docs/reference/….
  • 我阅读了 Unit keywork 的文档。我现在明白了。您的示例相当不错,但是,当我尝试想象但带有参数和/或返回值时,我仍然有些挣扎。另一件事,createTask() 是否返回闭包?
  • 是的。但我认为合适的 Kotlin 术语是“函数文字”,也就是 lambda 表达式。如果它“捕获”了在函数字面量之前定义的局部变量,它真的会变成一个闭包,而这里不是这种情况。
猜你喜欢
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2019-06-20
  • 1970-01-01
  • 2019-11-22
相关资源
最近更新 更多