<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On 26 Oct 2017, at 21:16, John McCall via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" class=""><div class="">On Oct 26, 2017, at 2:19 PM, Mike Kluev via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><div class=""><div dir="ltr" class="">on Wed, 25 Oct 2017 13:41:40 +0200 David Hart &lt;<a href="mailto:david@hartbit.com" class="">david@hartbit.com</a>&gt; wrote:<div class=""><br class=""><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;">class A {<br class="">&nbsp; &nbsp; func foo() {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; func local() {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bar() // error: Call to method ‘bar' in function ‘local' requires explicit 'self.' to make capture semantics explicit<br class="">&nbsp; &nbsp; &nbsp; &nbsp; }<br class=""><br class="">&nbsp; &nbsp; &nbsp; &nbsp; // ...<br class="">&nbsp; &nbsp; }<br class="">}<br class=""></blockquote><div class=""><br class=""></div><div class="">it's not only about calling "bar"... any variable access will require self. which will be quite annoying, especially given the fact that "local" my not even be used in an escaping context discussed. (*)</div><div class=""><br class=""></div><div class="">i think it is more consistent to prepend local with self if it is used in an escaping context:</div></div></div></div></div></div></blockquote><div class=""><br class=""></div>I think this would be possible, yes. &nbsp;If nothing else, we could allow the function to be explicitly declared escaping or non-ecaping to get this rule.</div></div></blockquote><div><br class=""></div><div>I don’t see how this makes any sense or be possible:</div><div><br class=""></div><div>* It doesn’t make sense for me because local is not a member function of A.</div><div>* It would cause ambiguity when trying to call another member function with the same name as the local function.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">John.</div><div style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""><br class=""></div><div class=""><div class="">func foo() {</div><div class=""><br class=""></div><div class="">&nbsp; &nbsp; func local() {</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; bar() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// no self needed here ever</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; variable = 1 &nbsp; // no self needed here, ever</div><div class="">&nbsp; &nbsp; }</div><div class="">&nbsp; &nbsp;&nbsp;</div><div class="">&nbsp; &nbsp; func otherLocal() {</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; print("i am not capturing self")</div><div class="">&nbsp; &nbsp; }</div><div class="">&nbsp; &nbsp;&nbsp;</div><div class="">&nbsp; &nbsp; DispatchQueue.main.async {</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; local() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// error without self</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; self.local() &nbsp; &nbsp; &nbsp; // ok</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; otherLocal() &nbsp; &nbsp; &nbsp; // ok without self</div><div class="">&nbsp; &nbsp; }</div><div class="">}</div></div><div class=""><br class=""></div><div class="">(*) interestingly, closures always treat themselves as "escaping", even if it's not the case, e.g. even if i only use them in a non-escaping contexts. worth to add an explicit attribute to denote non-escaping closures?</div><div class=""><br class=""></div><div class="">let closure = @nonescaping {</div><div class="">&nbsp; &nbsp; print("i am not escaping")</div><div class="">&nbsp; &nbsp; variable = 1 // ok without self</div><div class="">}</div><div class=""><br class=""></div><div class="">DispatchQueue.main.async(execute: closure) // error, non escaping closure passed</div><div class=""><br class=""></div><div class="">Mike</div><div class=""><br class=""></div></div></div></div></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class="" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">swift-evolution mailing list</span><br style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">swift-evolution@swift.org</a><br style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br class=""></body></html>