5
我怎样才能通过lambda表达式可选参数科特林语言科特林lambda表达式作为可选参数
val max = { a: Int, b: Int ->
if (a > b)
a
else
b
}
我必须要通过上面的东西就像是可选参数
我怎样才能通过lambda表达式可选参数科特林语言科特林lambda表达式作为可选参数
val max = { a: Int, b: Int ->
if (a > b)
a
else
b
}
我必须要通过上面的东西就像是可选参数
,您可以使用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)
}
在这两种情况下(默认和可选)定义了一个方法,你可以指定用于呼叫的拉姆达或者你可以忽略它
fun call() {
someDefault()
someDefault { a, b -> a * b}
someOptional()
someOptional { a, b -> a * b}
}
以下定义了接受函数的函数,并为传递的函数指定默认值(如果没有提供)。
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))
}
你想把这个lambda传递给什么? – zsmb13
注意,JDK中已经有一个'max'函数,可以通过'Math.max(a,b)'进行访问,它可以执行相同的操作。 – Robin
关于你的问题,我真的不明白你在问什么 - 你可以将'max'作为普通参数传递给任何函数调用,该函数调用采用'(Int,Int) - > Int'形式的函数。 – Robin