Firma de tipo para la function Kotlin con parameters pnetworkingeterminados

Digamos que tengo:

fun addInvoker(adder: () -> Int = ::add): Int{ return adder() } fun add(num1:Int = 1, num2:Int = 1): Int{ return num1 + num2 } 

Me sale un error ya que :: add tiene dos parameters, pero la firma de addInvoker requiere que tenga cero parameters. Sin embargo, si lo cambio a:

 fun addInvoker(adder: (Int, Int) -> Int = ::add): Int{ return adder() } fun add(num1:Int = 1, num2:Int = 1): Int{ return num1 + num2 } 

Entonces no puedo invocar sumdor (), es decir, invocando agregar con sus arguments pnetworkingeterminados.

Entonces, ¿hay alguna manera que pueda hacer :: agregar el argumento pnetworkingeterminado para invocarAdder pero todavía invocar add con adder() , invocándolo así con los arguments pnetworkingeterminados?

Puedes hacer una lambda de tu add que será una function sin argumento y llamará a add con sus arguments por defecto: { add() } .

Código completo:

 fun addInvoker(adder: () -> Int = { add() }): Int { return adder() } fun add(num1: Int = 1, num2: Int = 1): Int { return num1 + num2 } 

En Kotlin, las funciones con arguments pnetworkingeterminados no tienen representación especial en el sistema de types, por lo que la única opción es hacer que los wrappers pasen solo una parte de los arguments a ellos:

 val add0: () -> Int = { add() } val add1: (Int) -> Int = { add(num1 = it) } val add2: (Int) -> Int = { add(num2 = it) }