On Jun 16, 10:48   쮮 
> hakunin wrote:
> > The parenthesis have been discussed before, but maybe this is another
> > angle. In a nutshell:
>
> > print(true and true) # => throws the following:
>
> > SyntaxError: compile error
> > (irb):14: syntax error, unexpected kAND, expecting ')'
> > print(true and true)
> > ^
> >  
>
> > print (true and true) # => works. (notice the space)
>
> > It looks obvious that the only parenthesis around the method args are
> > containing the expression to be evaluated, so why would this cause
> > ambiguity?         
> > about this?
>
> > Thanks!
>
> print (true and true) is not incorrect, it is just using parentheses for
> a different purpose.
>
> What you are seeing is just a precedence issue, because "and" and "or"
> have very low precedence.
>
> Compare:
>
> print(true && true)
> print(true or true)
> print(true || true)
> print((true and true))
> print((true or true))
>
> Maybe you already knew that, though?
>
> -Justin

That makes sense, and yes, that I realized. In print() parenthesis are
enclosing the args, whereas in print () parenthesis are affecting
precedence of passed-in expression. However, from the usability
perspective, isn't it against some basic nature laws to leave it like
this? I would understand if print(true and return) was to be made
possible, although it looks quite ugly. In this case - Ruby says "i
don't need it, but I won't give it to you either!" - an error occurs,
but no reason provided for this to be restricted.  If enclosed
arguments can only either be replaced with args list, or with a high
precedence expression (otherwise error), then why not allow arg-
enclosing parenthesis to behave like precedence modifiers as well, so
that expression inside them plays first?  Overall it seems to be only
better for the elegance of code, and wouldn't hurt anyone. Unless I'm
missing the rest of the iceberg.