> 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

Reply via email to