On Mon, Jul 28, 2014 at 9:34 AM, Arup Rakshit
<aruprakshit / rocketmail.com> wrote:
> If I write
>
> puts 10 - 5
> # gives 5, same as
> puts(10 -5)
>
> Now if I write
>
> puts(- 5)
> #gives -5
> But if I try -
> puts - 5
> # NoMethodError: undefined method `-' for nil:NilClass
>
> It seems, puts - 5 is parsed as (puts) - 5.
>
> But why not are we allowed to write the *unary* operation with `puts` like
> we are allowed with *binary* one ?

Because the parser needs a way to make a decision about ambiguous
syntax to remove ambiguity.  The expression "puts - 5" parses the same
as "expr1 - expr2", i.e. a binary minus expression. There is really no
other way to interpret that without sacrificing consistency.

Kind regards

robert

-- 
[guy, jim].each {|him| remember.him do |as, often| as.you_can - without end}
http://blog.rubybestpractices.com/