[英]kotlin lambda expressions as optional parameter
如何將lambda表達式作為Kotlin語言中的可選參數傳遞
val max = { a: Int, b: Int ->
if (a > b)
a
else
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))
}
您可以使用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}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.