m.invoke() vs. m()

Neal Gafter neal at gafter.com
Sat Dec 5 09:03:48 PST 2009


On Sat, Dec 5, 2009 at 4:33 AM, <tronicek at fit.cvut.cz> wrote:

> I noticed a discussion about m.invoke() and m() on Mark Reinhold's blog
> and although it is true that if m is in the variable name space, we need
> "invoke", if syntax
>
> fun void m(int x);
>
> is adopted, it seems natural to have m in the method name space and then
> the "invoke" is not needed.
>

I think Mark's idea is workable whatever he syntax.  We had this in version
0.1 of the BGGA spec.  We backed it out not because we thought it a bad
idea, we just preferred to focus our attention on the other issues.

The basic approach is to say that a variable of function type is in both the
variable and the method namespaces.  It is a bit funny to make the function
interfaces special in this way, but I think it is sensible.  You need to
carefully define what it means to be "of function type" (e.g. does it
include a variable of a type derived from a function type), and you need a
whole bunch of additional rules (e.g. a variable of function type can't
hide/override a method, etc) but I think it's all workable.  It adds a
moderate amount of complexity to the specification, but (like most of BGGA)
that complexity is rarely surfaced to the developer.

Cheers,
Neal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/closures-dev/attachments/20091205/a625438f/attachment.html 


More information about the closures-dev mailing list