> 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