On 2013-02-04 04:34, deadalnix wrote:
I finally did my homework. Many languages have been presented as example
of optional parenthesis, and not posing ambiguity problems. As I'm not a
specialist of such languages, I wanted to do some homework and check
what is the reality.
See for instance
http://forum.dlang.org/thread/[email protected]?page=2#post-ju0d0o:241bvh:241:40digitalmars.com
for example of such claim.
1/ Ruby.
In Ruby, method are called without (). This is not ambiguous as fields
are always private.
I can elaborate a bit about Ruby. In Ruby it's possible to call a method
with parentheses regardless if it takes arguments or not.
It's correct that fields are always private. Inside a class fields
always start with an at sign, so there's conflict there. But there is a
chance of conflict for methods called without parentheses and local
variables. Example:
class Bar
def foo; end
def bar
foo = 3
a = foo # local variable
end
end
In the above example, if a local variable is declared with the same name
as a method it will always refer to the local variable, just as in D.
Callable objects. There is no conflict with callable objects since those
use a different syntax to invoke the object:
foo = lambda { }
foo.call
4/ Coffescript
Example given on that page http://coffeescript.org/ tends to show that
the behavior is similar to scala's. Note function square that is stored
into a structure as a function, and not evaluated.
In CoffeeScript it's only legal to call a function without parentheses
if it takes at least one argument. Example:
foo = -> console.log "asd"
bar = foo # refers to the "foo" function
bar = foo() # calls the "foo" function
x = (y) -> y * 2
bar = x # refers to the "x" function
x 3 # calls the "x" function with argument 3
x(3) # calls the "x" function with argument 3
So with CoffeeScript there's never a conflict.
--
/Jacob Carlborg