Intereting Posts
Модернизация не удается опубликовать на samsung s3 версии android 4.0.4 в то время как на данных Преобразование объекта с полями с нулевым значением в объект с полями, не допускающими нулевое значение, или null Ошибка: ошибка: разрешены только безопасные (?.) Или непустые (!!.) Вызовы в приемнике с нулевым значением типа View? RecyclerView с несколькими макетами – Jerky Ввод не работает со вторым конструктором Как хранить данные json при использовании Android Studio 3.0? Как получить значение перечисления типа raw из класса enum и строки в kotlin Пройдет ли lambdas к Observable.subscribe в kotlin приведет к утечкам памяти? Идентификатор ресурса всегда 0 Kotlin – свойство должно быть инициализировано или быть абстрактным, даже если есть функция init () Сервлеты / Undertow – Доступ к HttpServletRequest и HttpServletResponse Есть ли способ автозаполнения имен аргументов? Не удается создать проект с Android Studio 3.0 + DataBinding + Kotlin версия kotlin, которая используется для построения с градиентом (1.1.2-5), отличается от той, что включена в плагин IDE (1.1.2-4) Kotlin: Обязательно: kotlin.Boolean. Найдено: kotlin.Boolean?

Типовая подпись для функции 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) }