[swift-evolution] Referencing zero-parameter functions

Jordan Rose jordan_rose at apple.com
Thu May 5 12:08:00 CDT 2016


I agree with Xiaodi about the syntax. We should not use ‘_’ here for the same reason that we do use it for label-less parameters: it makes every argument always marked by at least two characters. That makes it easier to read and harder to typo.

I do see that there’s a problem between ‘foo()’ (a reference to a function with no arguments) and ‘foo()’ (the result of calling a function with no arguments).

I’m personally not so inclined to worry about the “reference to a function” syntax; I’ve ultimately fallen into the camp that prefers a wrapper closure in most cases. The selector case is a little different. If we ban general expressions there, then I think there’s no problem with it being mistaken for an actual call, because nothing in #selector would act like a call anyway. If we don’t, it’d still be unambiguous…but I agree that it could be confusing.

Jordan


> On May 5, 2016, at 09:34, Xiaodi Wu via swift-evolution <swift-evolution at swift.org> wrote:
> 
> I disagree. Not having a parameter label implies presence of a parameter. It is not natural at all to use the same symbol to denote absence of a parameter. `foo(_)` is a single typo away from `foo(_:)`.
> 
> IMO, after arbitrary expressions are removed from #selector, it is straightforwardly a bug that `foo()` cannot be used to denote a function with no parameters.
> On Thu, May 5, 2016 at 10:59 Alex Hoppen via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> Say you have the function `foo() -> Int`. Then `foo()` calls `foo` and returns its return value of type `Int` – not a reference to the function of type `Void -> Int`.
> 
> As to `_`: Like I stated in the proposal the underscore is already used in functions to state that there is no parameter name. So I think it’s a natural extension to also use it for saying that there are no arguments at all.
> 
> – Alex
> 
> > On 05 May 2016, at 17:21, David Sweeris <davesweeris at mac.com <mailto:davesweeris at mac.com>> wrote:
> >
> > What’s wrong with `foo()` again? To me, a `_` in the parameter list means that something is there, but the label doesn’t matter.
> >
> > - Dave Sweeris
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160505/2fc48b3e/attachment.html>


More information about the swift-evolution mailing list