<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Brent,<div class=""><br class=""></div><div class="">Thanks! Those are great points!</div><div class=""><br class=""></div><div class="">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. </div><div class=""><br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">- Dennis</div></div>
</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On May 30, 2016, at 3:01 PM, Brent Royal-Gordon <<a href="mailto:brent@architechies.com" class="">brent@architechies.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class="">// Allowed today:<br class="">func takesATuple(tuple: (Int, Int)) {<br class=""> let valueA = tuple.0<br class=""> let valueB = tuple.1<br class=""> // ...<br class="">}<br class=""><br class="">// Proposed syntax:<br class="">func takesATuple(tuple (valueA, valueB): (Int, Int)) {<br class=""> // use valueA<br class=""> // use valueB<br class="">}<br class=""></blockquote><br class="">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:<br class=""><br class="">// Allowed today:<br class="">func takes(a tuple: (Int, Int)) {<br class=""> let valueA = tuple.0<br class=""> let valueB = tuple.1<br class=""> // ...<br class="">}<br class=""><br class="">// Proposed syntax:<br class="">func takes(a (valueA, valueB): (Int, Int)) {<br class=""> // use valueA<br class=""> // use valueB<br class="">}<br class=""><br class="">Incidentally, it may also be a good idea to define what happens if you write:<br class=""><br class="">func takes((valueA, valueB): (Int, Int))<br class=""><br class="">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:<br class=""><br class="">1. It's equivalent to writing `_ (valueA, valueB)`.<br class="">2. It's illegal. You have to write a label, or `_` if you don't want one.<br class=""><br class="">My preference would be for #2, but you're the designer, not me.<br class=""><br class="">-- <br class="">Brent Royal-Gordon<br class="">Architechies<br class=""><br class=""></div></div></blockquote></div><br class=""></div></body></html>