Типовая подпись для функции Kotlin с параметрами по умолчанию

Скажем, у меня есть:

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

Я получаю сообщение об ошибке, так как :: add имеет два параметра, но подпись addInvoker требует наличия нулевых параметров. Однако, если я изменю его на:

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

Тогда я не могу вызывать adder (), то есть вызывать add со своими аргументами по умолчанию.

Итак, можно ли каким-то образом сделать: добавить аргумент по умолчанию для invokeAdder, но все же вызывать add с помощью adder() , вызывая его с помощью аргументов по умолчанию?

    Вы можете сделать лямбда вашего add которая будет функцией без аргументов, и вызовет add со своими аргументами по умолчанию: { add() } .

    Полный код:

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

    В Kotlin функции с аргументами по умолчанию не имеют специального представления в системе типов, поэтому единственный вариант – заставить обертки передавать только часть аргументов им:

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