Параметры позиционирования в polymorphi c функции в Kotlin - PullRequest
2 голосов
/ 21 февраля 2020

Привет, я новичок в kotlin, и я хотел бы иметь 2 функции Polymorphique с параметром по умолчанию, но, похоже, он не работает. Вот мой код:

private fun add(request: Request, share: Boolean = false, number : Int){
   Do something ... 
}
private fun add(key: String, share: Boolean = false){
   Do something ... 
}

Моя проблема в том, что я не могу использовать значение по умолчанию, потому что компилятор не выводит его.

add(request,  number)

Когда я делаю это , имея в виду, что я хочу использовать первую функцию со значением по умолчанию логического значения, я получил ошибку, в которой говорится, что ей требуется строка, и он нашел запрос.

Я думаю, что компилятор перепутан со значениями по умолчанию и полиморфизм, кажется, он не знает, какую функцию использовать. Есть ли способы исправить это, или я должен явно объявлять значение по умолчанию каждый раз, делая значение по умолчанию бесполезным?

Ответы [ 3 ]

4 голосов
/ 21 февраля 2020

Ответ от Абубакара работает и рекомендуемый способ - сохранить параметры по умолчанию на последнем. Однако то, что у вас есть, тоже сработает. Обязательно используйте именованные параметры для параметров после значения по умолчанию.

add(request, number = 5) // Or add(request, number= myNumberValue)

также будет работать.

4 голосов
/ 21 февраля 2020

Переместите параметр со значением по умолчанию на 3-е место в первой функции, чтобы он стал

private fun add(request: Request, number : Int, share: Boolean = false){ Do something ...

, он будет работать. Вы можете решить это с помощью именованных аргументов, например, если вы позвоните add(request = request, number = number) Это будет работать также

0 голосов
/ 21 февраля 2020

По умолчанию аргументы основаны на позиции, или вы должны указать имя параметра, как в примере ниже:

fun addName(name: String, newUser: Boolean, surname: String = "") {

}

fun addName(name: String) {

}


class Person() {
    init {
        addName(name = "Johnny", surname = "BeGood", newUser = true) // Using 1st function with mixed positions parameters
        addName("Jack") // Using 2nd function
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...