There is nothing consistent in the following example:

let (x: a, y: b) = (x: 0, y: 1)
Labels are not simple descriptors, they signal that the assignment for the RHS 
will happen to some constant associated with the label. The assignment 
direction is from right-to-left! Labeled tuple destructuring breaks this rule. 
Furthermore you’re not allowed to think of a and b as if they were some inout 
variables for the purpose of the assignment there.

The syntax is ambiguous to the rest of the language and also exactly the case 
why the following code is not only confusing but simply mentally wrong:

let (x: Int, y: Double) = (3, 1)
let result = Int + Double // 4


-- 
Adrian Zubarev
Sent with Airmail

Am 6. Mai 2017 um 08:06:30, Xiaodi Wu (xiaodi...@gmail.com) schrieb:

The identifier after a colon is *never* a type in any pattern matching, and 
there's no need of which I'm aware to support type annotations in pattern 
matching. We put colons after labels, and the current syntax is perfectly 
consistent here. What is the defect you're trying to cure?
On Fri, May 5, 2017 at 22:42 Brent Royal-Gordon <br...@architechies.com> wrote:
Sorry for wrecking the threading, but any chance we could change the syntax to:

let (x myX: Int, y myY: Int) = ...

That would ensure the identifier after the colon was always treated as a type. 
I suppose if you wanted to infer the type, it'd be:

let (x myX, y myY) = ...

-- 
Brent Royal-Gordon
Sent from my iPhone

On May 5, 2017, at 12:04 AM, Adrian Zubarev via swift-evolution 
<swift-evolution@swift.org> wrote:

If we ban reordering now, than I don’t see choosing different names in tuple 
destructuring as a strong argument of allowing labels there let (x: a, y: b). 
They’re literally the same as one would write comments inside the destructured 
tuple let (/* my x */ x, /* my y*/ y).
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to