There was some previous discussion under "[Discussion] Enforce argument labels on tuples <http://thread.gmane.org/gmane.comp.lang.swift.evolution/14910>".
Halfway through the thread, Haravikk clearly stated the key point: On Thu, Apr 21, 2016 at 12:14 AM, Haravikk via swift-evolution < [email protected]> wrote: > I think the important thing to remember is that the label check is > intended to prevent cases like this: > let a:(left:Int, right:Int) = (1, 2) > var b:(right:Int, left:Int) = a > While the two tuples are compatible by type, the meaning of the values > may differ due to the different labels; in this case the values are > represented in a different order that a developer should have to explicitly > reverse to ensure they aren’t making a mistake, or they could represent > radically different concepts altogether. I agree there's a potential for confusion here, and I suggest we should add an error (or warning) imploring the user to make the conversion explicit, when the source tuple is labeled: func foo() -> (left: Int, right: Int) { return (3, 4) } let (left: a, right: b) = foo() // ok, labels match var x = 0, y = 0 (left: x, right: y) = (1, 3) // ok, source is unlabeled let (c, d) = foo() // error: conversion between tuple types '(left: Int, right: Int)' and '(Int, Int)' requires explicit 'as' operator // suggested fix: "let (c, d) = foo() as (Int, Int)" let (right: e, left: f) = foo() // error: conversion between tuple types '(left: Int, right: Int)' and '(right: Int, left: Int)' requires explicit 'as' operator // suggested fix: "let (right: e, left: f) = foo() as (right: Int, left: Int)" Thoughts? Jacob
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
