为什么Kotlin高阶函数有命名参数?

时间:2018-02-16 20:19:27

标签: kotlin

我们采取以下代码段:

class Foo {
    fun bar(baz: (x: String) -> Unit) {
        // ...
    }
}

它以这种方式和baz: (String) -> Unit正确编译(请注意x:已在此处删除)

为什么可以将baz函数的第一个参数命名为x?可以以任何方式使用吗?

1 个答案:

答案 0 :(得分:6)

这是可选的,为bar方法的调用者提供额外的含义,让他们知道他们传递的baz方法将作为参数接收。

当使用bar查找Ctrl + Q方法的文档时,它将显示在IntelliJ中,如果您在传递给{的lambda内点击x ->,它将自动完成Ctrl + Space {1}}也是。当然,调用者仍然可以为lambda的传入参数命名,但是如果lambda有多个参数,这可能很有用。

例如,使用此更高阶函数:

bar

当您从自动完成中选择fun bar(foo: (foo1: Int, foo2: Int, foo3: Int) -> Unit) { // ... } 函数时,IDEA会自动为您提供此lambda正文:

bar