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