Kotlin:“折叠”函数如何接受一个论点?

时间:2020-03-02 10:42:07

标签: kotlin

根据Kotlin的文档,函数“ fold”具有两个参数:初始值和操作。 但是,我看到以下代码可以编译并很好地工作:

listOf<Int>(1, 2, 3).fold(0) { x, y -> x + y }

括号内只有一个参数,而不是两个。如果是这样,代码的编译怎么可能成功?这应该是一个错误。

1 个答案:

答案 0 :(得分:3)

According docs:

在Kotlin中有一个约定:如果函数的最后一个参数 是一个函数,然后将lambda表达式作为相应的 参数可以放在括号之外。

如果lambda是该调用的唯一参数,则可以完全省略括号。

这个称为trailing lambda的功能使新手Kotlin开发人员难以理解代码,但是一旦获得,它就可以编写类似DSL的代码,如下所示:

val person = person {
    name = "John"
    age = 25
    address {
        street = "Main Street"
        number = 42
        city = "London"
    }
}

这就是为什么它具有如此强大的语言功能。