kotlin лямбда-выражения в качестве необязательного параметра

Как передать 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 } 

или вы также можете определить метод с лямбдой в качестве параметра, который является необязательным

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