在我正在审查的一些培训中,我不完全理解示例高阶函数和 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()
}
})
其中将 lambda 包含在 myWith
的正常参数列表中
最佳答案
在 Kotlin 中,有一个约定,如果函数的最后一个参数接受一个函数,则可以将作为相应参数传递的 lambda 表达式放在括号之外。
来源:https://kotlinlang.org/docs/reference/lambdas.html#passing-a-lambda-to-the-last-parameter
关于java - 对于 Kotlin 中的高阶函数,为什么 lambda 会显示在其他函数参数之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56365458/