簡體   English   中英

kotlin lambda表達式作為可選參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM