<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 Feb 21, 2017, at 11:05 PM, Jacob Bandes-Storch 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 dir="ltr" class=""><div class="">Evolutioniers,</div><div class=""><br class=""></div><div class=""><b class="">Compound name syntax</b>&nbsp;— <font face="monospace, monospace" class="">foo(_:)</font>, <font face="monospace, monospace" class="">foo(bar:)</font>, <font face="monospace, monospace" class="">foo(bar:baz:)</font> — is used to disambiguate references to functions. (You might've used it inside a #selector expression.) But there's currently no compound name for a function with no arguments.</div><div class=""><br class=""></div><div class=""><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; func foo() {} &nbsp;// no compound syntax for this one :(</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; func foo(_ bar: Int) {} &nbsp;// foo(_:)</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; func foo(bar: Int) {} &nbsp;// foo(bar:)</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; func foo(bar: String, baz: Double) {} &nbsp;// foo(bar:baz:)</font></div></div><div class=""><br class=""></div><div class="">Given these four functions, only the first one has no compound name syntax. And the simple reference "<font face="monospace, monospace" class="">let myfn = foo</font>" is ambiguous because it could refer to any of the four. A workaround is to specify a contextual type, e.g. "<font face="monospace, monospace" class="">let myfn = foo as () -&gt; Void</font>".</div><div class=""><br class=""></div><div class="">I filed&nbsp;<a href="https://bugs.swift.org/browse/SR-3550" class="">SR-3550</a>&nbsp;for this a while ago, and there was some discussion in JIRA about it. I'd like to continue exploring solutions here and then write up a formal proposal.</div><div class=""><br class=""></div><div class="">To kick off the discussion,&nbsp;<b class="">I'd like to propose <font face="monospace, monospace" class="">foo(:)</font>&nbsp;for nullary functions.</b></div></div></div></blockquote><div><br class=""></div>I like this idea.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Advantages:</div><div class="">- the colon marks a clear similarity to the&nbsp;<font face="monospace, monospace" class="">foo(bar:)</font> form when argument labels are present.</div><div class="">- cutely parallels the empty dictionary literal, <font face="monospace, monospace" class="">[:]</font>.</div><div class=""><br class=""></div><div class="">Disadvantages:</div><div class="">- violates intuition about one-colon-per-argument.</div><div class="">- the parallel between <font face="monospace, monospace" class="">#selector(foo(:))</font> and <font face="monospace, monospace" class="">@selector(foo)</font>&nbsp;is not quite as obvious as between <font face="monospace, monospace" class="">#selector(foo(_:))</font> and&nbsp;<font face="monospace, monospace" class="">@selector(foo:)</font>.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">For the sake of discussion, another option would be <font face="monospace, monospace" class=""><b class="">foo(_)</b></font>. This was my original choice, and I like that the number of colons matches the number of parameters. However, it's a little less obvious as a function reference. It would preclude _ from acting as an actual identifier, and might conflict with pattern-matching syntax (although it appears functions can't be compared with ~= anyway).</div></div></div></blockquote><div><br class=""></div>foo(_) looks like a pattern to me. Even if it doesn’t introduce ambiguity in the grammar it might be confusing.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class=""><div class=""><br class=""></div><div class="">Looking forward to everyone's bikeshed color ideas,<br clear="all" class=""><div class=""><div class="gmail_signature"><div dir="ltr" class=""><div class="">Jacob<br class=""></div></div></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="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>