我正在GitHub上进行Kotlin练习(见下面的链接)。
我不太了解以下代码。
具体地
鼠标侦听器在哪里创建?
如何调用mouseListener
?它被调用了4次。我之前没有看到这种语法。如果您能指出文档,那就太棒了。
// this code is on the github and is working val result = task10 { mouseListener -> mouseListener.mouseClicked(mouseEvent) mouseListener.mouseClicked(mouseEvent) mouseListener.mouseClicked(mouseEvent) mouseListener.mouseClicked(mouseEvent) }
我认为代码应该写成如下代码。但是,如果我跑了,就不会触发任何事件。
// this is not working
val result = task10 {
mouseListener ->
{
mouseListener.mouseClicked(mouseEvent)
mouseListener.mouseClicked(mouseEvent)
mouseListener.mouseClicked(mouseEvent)
mouseListener.mouseClicked(mouseEvent)
}
}
该方法的完整声明是:
fun task10(handleMouse: (MouseListener) -> Unit): Int {
var mouseClicks = 0
handleMouse(todoTask10())
return mouseClicks
}
提前谢谢。
答案 0 :(得分:1)
在大多数情况下,花括号表示lambda声明(当它不是其他声明的一部分时)。即第二个示例传递给返回lambda的task10
lambda。
您可以在the reference
中找到更多信息注意:您应该从IDE和编译器获得内部lambda的警告。
答案 1 :(得分:1)
它实际上在Kotlin中被称为类型安全构建器。请参阅此处的详细说明。
http://kotlinlang.org/docs/reference/type-safe-builders.html
相关段落我将其剪切并粘贴在
下面......那么,这个电话有什么作用?让我们看一下上面定义的html函数体。它创建了一个新的HTML实例,然后通过调用作为参数传递的函数来初始化它(在我们的示例中,这归结为在HTML实例上调用head和body),然后它返回此实例。这正是建筑师应该做的事情。 ...
这正是它在调用task10函数的代码中的作用。