kotlin lambda表达式作为可选参数

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

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} } 
Interesting Posts