函数重载两个函数的区别仅在于默认参数

时间:2019-03-28 13:01:17

标签: function oop overloading

两个具有相同名称,两个参数相同的方法,其中一个具有额外的可选(默认)参数。

因此,当我调用图片中所示的方法时,为什么未调用带有可选参数的方法?

为什么答案 ab 不是 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 个答案:

答案 0 :(得分:1)

由于省略了可选参数,没有该参数的方法更适合调用。
您所描述的场景没有意义-如果前两个参数已经存在重载,则第三个参数应该不是可选的。

语言/框架之间的重载解析规则有所不同-但这是一个显而易见的选择,我严重怀疑任何编译器是否会选择带有额外可选参数的方法。
实际上,令我惊讶的是它甚至可以编译(我已经检查了等效的C#代码,并且即使没有警告也可以编译)