I was also in favour of using an ellipsis operator to “unsplat” (to borrow the 
term in some other languages) an array into variadic parameters. However, after 
taking a look at Haravikk’s proposal [1] I think I would oppose using ellipsis 
for that purpose.

The main advantage I see is that this proposal enables future extensions to 
other kind of iterable collections (as shown in the “Proposed Extension” 
section). It'd break with “legacy” variadic features and would give Swift a 
more powerful feature to design APIs.

[1] 
https://github.com/Haravikk/swift-evolution/blob/a13dc03d6a8c76b25a30710d70cbadc1eb31b3cd/proposals/nnnn-variadics-as-attribute.md


On 27 Feb 2017, at 04:00, Derrick Ho via swift-evolution 
<[email protected]<mailto:[email protected]>> wrote:

Well, I have found these discussions...

It was marked as a bug<https://bugs.swift.org/browse/SR-128> and then directed 
to swift 
evolution<https://github.com/ArtSabintsev/swift-evolution/blob/5ef676ec2616465c1cb854f82e3fd4e90b4b09c6/proposals/array-variadic-function.md>.

@jose, the prefix operator you mention looks good, but in the past discussions 
they wanted a postfix operator so that it would match the declaration.  I think 
I like the postfix operator.

func foo(_ a: String...) {}

foo(["a", "b", "c"]...) //<- This looks clear.  It is turning the array into a 
variadic argument.

However, that thread was closed because it wasn't "discussed" enough prior 
making the pull request.

therefore, if people want it, they got to cast their vote in here by either 
supporting it or opposing it.

I like my original suggestion since it is more explicit.

foo(["a", "b", "c"] as String...)



On Sun, Feb 26, 2017 at 7:59 PM Jose Cheyo Jimenez 
<[email protected]<mailto:[email protected]>> wrote:
On Feb 26, 2017, at 8:26 AM, Derrick Ho via swift-evolution 
<[email protected]<mailto:[email protected]>> wrote:

In swift, a variadic argument can become an array without too much effort.

func foo(_ va: String...) {
   let a: [String] = va
}

However, it seems odd to me that an array can not be converted into a variadic 
argument

foo(["a", "b", "c"]) // <-error
foo("a", "b", "c") // no error

Other people have wondered about this 
too.<http://stackoverflow.com/questions/24024376/passing-an-array-to-a-function-with-variable-number-of-args-in-swift>

According to this thread<https://devforums.apple.com/message/970958#970958> 
Doug Gregor says it is due to some type ambiguity. with Generics.

If type ambiguity is the issue, Do we have the option to cast it to the correct 
type?

foo(["a", "b", "c"] as String...) // <- error.  doesn't consider String... to 
be a type.

I think this needs to be done with a spread operator in order to disambiguate.

foo(...["a", "b", "c”]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

I like the idea. Its syntactic sugar so I am not sure how open the core team 
would be to adding it.


What does the community think? Should we be granted some mechanism to turn an 
array into a variadic argument?
_______________________________________________
swift-evolution mailing list
[email protected]<mailto:[email protected]>
https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]<mailto:[email protected]>
https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to