> On Feb 26, 2017, at 7:00 PM, Derrick Ho <[email protected]> wrote:
> 
> Well, I have found these discussions...
> 
> It was marked as a bug and then directed to swift evolution.
> 
> @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.

This is problematic because of the similarities with the proposed one sided 
ranges in the new String manifesto. These operations produce slices which are 
collection.

c[i...]...  // first dots one sided range, second the spread operator. 

a prefix ... operator would be a little better here but just barely.  
...c[i...] 

I think a prefix of * or ... would work great for declaring and deconstructing. 
func foo(_ a: ...[Int]) {} // declared as array required. 
foo(...[1,2,3,4])
foo(...(0,1,2,3))

func foo(_ a: *[Int]) {}
foo(*[1,2,3,4])
foo(*(0,1,2,3))
foo(1,2,3,4)

> 
> 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]> 
> wrote:
>>> On Feb 26, 2017, at 8:26 AM, Derrick Ho via swift-evolution 
>>> <[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.
>>> 
>>> According to this thread 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]
>>> 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