具有以下功能
fun functionOne(element: Int, func1: (index: Int) -> Unit) {
println("element=$element")
func1(element)
}
我可以这样称呼它:
functionOne(element = 123, func1 = {index -> println("index: $index")})
没有编译器抱怨
functionOne(123, {index -> println("index: $index")})
现在编译器建议
Lambda argument should be moved out of parentheses
或
functionOne(123) { index -> println("index: $index") }
没有抱怨
但是,除非我没有弄对,否则这种行为仅限于一个 lambda 参数,即具有
fun functionTwo(element: Int, func1: (index: Int) -> Unit, func2: (index: Int) -> Unit) {
println("element=$element")
func1(element)
func2(element)
}
我可以这样打电话
functionTwo(123, { index -> println("index: $index")}, { index -> println("index2: $index")})
但是这个不能编译
functionTwo(456) {index -> println("index: $index"} { index -> println("index2: $index")})
您能否确认一下,或者让我知道将 lambda 参数移出括号
谢谢!
根据文档,只有尾随 lambda 可以放在括号之外:
传递尾随 lambda
根据 Kotlin 约定,如果函数的最后一个参数是函数,那么作为相应参数传递的 lambda 表达式可以放在括号之外:
val product = items.fold(1) { acc, e -> acc * e }
这种语法也称为 trailing lambda。
如果 lambda 是该调用中的唯一参数,则可以完全省略括号:
run { println("...") }
这意味着您无法将倒数第二个 lambda 表达式移出括号,因此您无法将多个 lambda 表达式移出括号。