#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 #, и он компилируется даже без предупреждения)