Функция, перегружающая две функции, отличается только параметром по умолчанию - PullRequest
0 голосов
/ 28 марта 2019

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

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

Почему ответ ab not abc ?

enter image description here

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 Ответ

1 голос
/ 28 марта 2019

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

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

...