> On 8 Jul 2016, at 10:31, Pyry Jahkola <[email protected]> wrote:
>
> If you take this function for example,
>
> func printThem(@variadic _ values: [Any])
>
> then what would `values` be in the following calls, and why?
>
> printThem() // clearly []
> printThem(1) // clearly [1]
> printThem(1, 2) // clearly [1, 2]
> printThem([1], [2]) // clearly [[1], [2]]
> printThem([]) // [] or [[]], which one?
> printThem([1]) // [1] or [[1]]?
> printThem([1, 2]) // [1, 2] or [[1, 2]]?
>
> I think it would be less painful a change (i.e. can be delayed past Swift 3)
> if we just augment what we have (the `...` argument declaration syntax) with
> a way to expand an Array in place of a variadic argument:
>
> func printThem(_ values: Any...)
>
> printThem(1) // values == [1]
> printThem([1]) // values == [[1]]
> // Possible expansion postfix syntax:
> printThem([1]...) // values == [1]
> // Expanding a non-array sequence:
> let things: Set<Int> = [1, 2, 3]
> printThem(Array(things)...)
Good point, but actually these don't seem mutually exclusive; the three problem
examples you gave could be resolved either by requiring the extra set of square
brackets for clarity, and/or some kind of expansion like you suggest, either an
operator or even possibly repurposing the attribute at the call-site for
consistency. For example:
printThem([1]) // warning, ambiguous
printThem([[1]])// non-variadic
printThem(@variadic [1]) // absolutely definitely 100% a variadic call
printThem([1],) // alternative to an operator/attribute for variadic
disambiguation?
Thoughts?
> On 8 Jul 2016, at 10:42, Tino Heth <[email protected]> wrote:
> I'm not sure if the timing of this proposal is coincidence (I recently
> revived a discussion to remove variadics)
It is definitely not a coincidence ;)
I participated in the discussion on removal in the past and actually posted a
preliminary version of this there, so the recent posts reminded me to put it
into a proper proposal. Personally like some I'd just remove the feature
completely, but it seems enough people want to keep it that it's worth
exploring alternatives as there seems a fairly even mix of those for and
against the feature._______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution