> On Sep 30, 2016, at 5:02 AM, Toni Suter via swift-users > <swift-users@swift.org> wrote: > > Hi, > > I am trying to get a better understanding of Swift's function overload > resolution rules. > As far as I can tell, if there are multiple candidates for a function call, > Swift favors > functions for which the least amount of parameters have been ignored / > defaulted. For example: > > // Example 1 > func f(x: Int) { print("f1") } > func f(x: Int, y: Int = 0) { print("f2") } > f(x: 0) // f1 > > // Example 2 > func f(x: Int, y: Int = 0) { print("f1") } > func f(x: Int, y: Int = 0, z: Int = 0) { print("f2") } > f(x: 0) // f1 > > It also looks like Swift favors functions with default-value parameters over > functions with variadic parameters: > > func f(x: Int = 0) { print("f1") } > func f(x: Int...) { print("f2") } > > f() // f1 > f(x: 1) // f1 > f(x: 1, 2) // f2 (makes sense because f1 would not work here) > f(x: 1, 2, 3) // f2 (makes sense because f1 would not work > here) > > But then I tested functions with default-value parameters and variadic > parameters and things start to get weird. > For example, this must be a bug, right? > > func f(x: Int..., y: Int = 0) { print(x, y) } > func f(x: Int...) { print(x) } > > f() // [] > f(x: 1) // [1] > f(x: 1, 2) // [1, 2] 0 > f(x: 1, 2, 3) // [1, 2, 3] > > I think, in this example, it should always call the second overload, because > no parameter is ignored / defaulted. What do you think?
Can you open a new bug report for this at bugs.swift.org <http://bugs.swift.org/>? Mark > > Thanks and best regards, > Toni > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users