在我正在审查的一些培训中,我不完全了解示例高阶函数和lambda是如何通过语法连接的
此高阶Kotlin函数
fun myWith(name: String, block: String.() -> Unit) {
name.block()
}
被这样调用
myWith(fish.name) {
capitalize()
}
我知道第二部分是lambda,但是我不明白为什么它不作为第二个参数不包含在函数中,而是挂在参数之外。就像为什么不将其调用为:
myWith(fish.name, { capitalize() } )
此示例的更详细的说明显示为
myWith(fish.name, object : Function1<String, Unit> {
override fun invoke(name: String) {
name.capitalize()
}
})
哪个IS会将lambda包含在myWith
的常规参数列表中
答案 0 :(得分:2)
在Kotlin中,有一个约定,如果函数的最后一个参数接受函数,则可以将作为相应参数传递的lambda表达式放在括号之外。
来源:https://kotlinlang.org/docs/reference/lambdas.html#passing-a-lambda-to-the-last-parameter