根据Kotlin的文档,函数“ fold”具有两个参数:初始值和操作。 但是,我看到以下代码可以编译并很好地工作:
listOf<Int>(1, 2, 3).fold(0) { x, y -> x + y }
括号内只有一个参数,而不是两个。如果是这样,代码的编译怎么可能成功?这应该是一个错误。
答案 0 :(得分:3)
在Kotlin中有一个约定:如果函数的最后一个参数 是一个函数,然后将lambda表达式作为相应的 参数可以放在括号之外。
和
如果lambda是该调用的唯一参数,则可以完全省略括号。
这个称为trailing lambda
的功能使新手Kotlin开发人员难以理解代码,但是一旦获得,它就可以编写类似DSL的代码,如下所示:
val person = person {
name = "John"
age = 25
address {
street = "Main Street"
number = 42
city = "London"
}
}
这就是为什么它具有如此强大的语言功能。