kotlin lambda表达式作为可选参数

时间:2017-07-04 09:02:54

标签: android lambda expression kotlin

如何在 Kotlin 语言中将 lambda表达式作为可选参数传递

val max = { a: Int, b: Int ->
  if (a > b)
      a
  else
      b
}

我必须传递上面的东西就像可选参数

2 个答案:

答案 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}
}