[swift-evolution] [Pitch] Tuple Destructuring in Parameter Lists
Dennis Weissmann
dennis at dennisweissmann.me
Mon May 30 10:25:44 CDT 2016
Hi Brent,
Thanks! Those are great points!
I haven’t thought about the possibility of suppressing the external label. I like your option 2 very much! I’ll add it to the proposal and change the used variable names.
- Dennis
> On May 30, 2016, at 3:01 PM, Brent Royal-Gordon <brent at architechies.com> wrote:
>
>> // Allowed today:
>> func takesATuple(tuple: (Int, Int)) {
>> let valueA = tuple.0
>> let valueB = tuple.1
>> // ...
>> }
>>
>> // Proposed syntax:
>> func takesATuple(tuple (valueA, valueB): (Int, Int)) {
>> // use valueA
>> // use valueB
>> }
>
> Personally, I find this example confusing because the label is "tuple", which kind of reads like a keyword, and because you're using the same name for the label and variable. If I understand the semantics you're proposing correctly, I think it would be clearer to write this example like:
>
> // Allowed today:
> func takes(a tuple: (Int, Int)) {
> let valueA = tuple.0
> let valueB = tuple.1
> // ...
> }
>
> // Proposed syntax:
> func takes(a (valueA, valueB): (Int, Int)) {
> // use valueA
> // use valueB
> }
>
> Incidentally, it may also be a good idea to define what happens if you write:
>
> func takes((valueA, valueB): (Int, Int))
>
> Normally, if there's no separate label and variable name, they're the same, but you can't have a label like `(valueA, valueB)`. I see two reasonably sensible answers here:
>
> 1. It's equivalent to writing `_ (valueA, valueB)`.
> 2. It's illegal. You have to write a label, or `_` if you don't want one.
>
> My preference would be for #2, but you're the designer, not me.
>
> --
> Brent Royal-Gordon
> Architechies
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160530/eab5789c/attachment-0001.html>
More information about the swift-evolution
mailing list