<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">Em ter, 14 de nov de 2017 às 17:02, Mike Kluev via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; escreveu:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>On Mon, 13 Nov 2017 22:30:25 +0100 David Hart &lt;<a href="mailto:david@hartbit.com" target="_blank">david@hartbit.com</a>&gt; wrote:<br></div></div><div dir="ltr"><div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
&gt; On 13 Nov 2017, at 05:52, Slava Pestov &lt;<a href="mailto:spestov@apple.com" target="_blank">spestov@apple.com</a>&gt; wrote:<br>&gt;<br>
&gt;&gt; On Nov 12, 2017, at 8:11 PM, Brent Royal-Gordon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;<br>&gt;&gt; By analogy with the current closure syntax, the capture list ought to go somewhere before the parameter list, in one of these slots:<br>
&gt;&gt;<br>
&gt;&gt; 1.   func fn&lt;T&gt;[foo, bar](param: T) throws -&gt; T where T: Equatable { … }<br>
&gt;&gt; 2.   func fn[foo, bar]&lt;T&gt;(param: T) throws -&gt; T where T: Equatable { … }<br>
&gt;&gt; 3.   func [foo, bar] fn&lt;T&gt;(param: T) throws -&gt; T where T: Equatable { … }<br>
&gt;&gt; 4.   [foo, bar] func fn&lt;T&gt;(param: T) throws -&gt; T where T: Equatable { … }<br>
&gt;&gt;<br>
&gt;&gt; Of these options, I actually think #4 reads best; 1 and 2 are very cluttered, and 3 just seems weird. But it seems like the one that would be easiest to misparse.<br>
&gt;<br>
&gt; Another option that reads nicely IMHO is<br>
&gt;<br>
&gt; func fn&lt;T&gt;(param: T) throws -&gt; T where T : Equatable [foo, bar] { … }<br>
&gt;<br>
&gt; I think #4 is ambiguous with array literals unfortunately.<br></blockquote></div></div></div></div><div dir="ltr"><div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"></blockquote><div><br></div><div>adding to the list of options:</div><div><br></div><div>6. func fn&lt;T&gt;(param: T) throws -&gt; T where T: Equatable [foo, bar] { … }</div><div><br></div><div>otherwise +1 to #1 and to the one in proposal. also see about #4 below.</div><div><br></div><div>plus, if 90%+ of use cases in practice would be [weak self] -- (the only examples shown in the proposals FTM) -- i would strongly consider this syntax sugar in addition to a generic notation:</div><div><br></div><div>weak func fn&lt;T&gt;(param: T) throws -&gt; T where T: Equatable { … }</div><div><br></div><div>works with &quot;unowned&quot; as a bonus.</div><div><br></div></div></div></div></div></blockquote><div><br></div><div>weak func  to imply [weak self] is a good idea. <br></div><div><br></div><div>weak func foo() {</div><div>  self?.bar();</div><div>}</div><div><br></div><div><div>unowned func foo() {</div><div>  self.bar();</div><div>}</div><div><br></div><div>Maybe this to:</div><div><br></div> onChange = weak { self?.bar() }<br class="inbox-inbox-Apple-interchange-newline"></div><div><br></div><div><div>But we still have the problem using capture list.</div><br class="inbox-inbox-Apple-interchange-newline"></div><div>And to avoid inconsistencies, I would leave the same way as the proposal.<br></div><div><br></div><div><pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,&quot;Liberation Mono&quot;,Menlo,Courier,monospace;font-size:13.6px;margin-top:0px;margin-bottom:0px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-radius:3px;word-break:normal;color:rgb(36,41,46)"> <span class="inbox-inbox-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">func</span> <span class="inbox-inbox-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">local</span>() { [<span class="inbox-inbox-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">weak</span> <span class="inbox-inbox-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">self</span>] <span class="inbox-inbox-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">in</span>
            <span class="inbox-inbox-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">self</span><span class="inbox-inbox-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">?</span>.<span class="inbox-inbox-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">bar</span>()
        }</pre></div><div><br></div><div>There&#39;s no perfect solution. And in this works fine today.</div><div><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div class="gmail_extra"><div class="gmail_quote"><div></div><div>if implement this sugar than some variation of #4 looks appealing to have these capture things close.</div></div></div></div></div><div dir="ltr"><div><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>Mike</div><div><br></div></div></div></div></div>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div></div>