如何在 Kotlin 语言中将 lambda表达式作为可选参数传递
val max = { a: Int, b: Int ->
if (a > b)
a
else
b
}
我必须传递上面的东西就像可选参数
答案 0 :(得分:10)
以下定义接受函数的函数,如果没有提供,则指定传递函数的默认值。
fun foobar(fn: (a: Int, b: Int) -> Int = { a: Int, b: Int -> if (a > b) a else b }) {
println(fn(42, 99))
}
您可以传递自己的功能:
val min = { a: Int, b: Int -> if (a <= b) a else b }
foobar(min)
val max = { a: Int, b: Int -> if (a > b) a else b }
foobar(max)
您可以省略该功能并使用默认值:
foobar()
或者你可以将标准库maxOf
函数作为默认函数,而不是自己编写:
fun foobar(fn: (a: Int, b: Int) -> Int = ::maxOf) {
println(fn(42, 99))
}
答案 1 :(得分:4)
您可以将max
功能用作默认
fun someDefault(f: (a: Int, b: Int) -> Int = max) {
f(1, 7)
// do something
}
或者您也可以使用lambda作为参数定义一个方法,该方法是可选的
fun someOptional(f: ((a: Int, b: Int) -> Int)? = null) {
f?.invoke(1, 7)
}
在这两种情况下(默认和可选)你可以为调用指定一个lambda,或者你可以省略它
fun call() {
someDefault()
someDefault { a, b -> a * b}
someOptional()
someOptional { a, b -> a * b}
}