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

#function #oop #overloading

#функция #ооп #перегрузка

Вопрос:

Два метода с одинаковым именем и имеют 2 одинаковых параметра, и один из методов имеет дополнительный необязательный параметр (по умолчанию).

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

Почему ответ — ab, а не abc?

введите описание изображения здесь

 func call(x:String, y:String, z:String! = "c") -> String{
    //z parameater is optional
    print("3 parameater!")
    return x y z;
}

func call(x:String, y:String) -> String{
    print("2 parameater!")
    return x y;
}

call(x: "a", y: "b")
  

Комментарии:

1. Публикуйте код, а не скриншоты кода.

2. Что это за язык? . разрешение перегрузки основано на правилах. Они переносятся между разными языками.

Ответ №1:

Поскольку, когда вы опускаете необязательный параметр, метод без него лучше подходит для вызова.
Сценарий, который вы описываете, не имеет смысла — если первые два параметра уже перегружены, третий не должен быть необязательным.

Правила разрешения перегрузки различаются между языками / фреймворками — но это своего рода очевидный выбор, и я серьезно сомневаюсь, что какой-либо компилятор когда-либо выбрал бы метод с дополнительным необязательным параметром.
На самом деле, я удивлен, что это вообще компилируется (я проверил эквивалентный код c #, и он компилируется даже без предупреждения)