Jacob Fugal wrote:
> On 11/3/06, noreply / rubyforge.org <noreply / rubyforge.org> wrote:
>> Due to the way ruby interprets formula's, squaring a negative number
>> isn't possible unless you use brackets. This caught me unaware, and
>> might be counterintuitive for more people.
>>
>> irb(main):018:0> -2**2
>> => -4
>> irb(main):019:0> (-2)**2
>> => 4
> 
> The "problem" lies in the confluence of precedence with the syntax of
> literals. It should be obvious that exponentiation (**) binds with a
> higher precedence than unary negation /as an operation/, because
> exponentiation has precedence of multiplication (and unary negation is
> essentially multiplication by -1). The confusion is because there's a
> misconception the the "-" in "-2" is part of the literal when it is
> not -- it is an operation applied to the object derived from the
> literal "2".

Any yet

irb(main):002:0> -2.abs
=> 2

So there are cases where the operation of "concatenating characters to 
form a literal" has higher priority than an operation on objects.

It's not simply a matter of `-' having priority over `.', as can be seen 
from this example:

irb(main):006:0> x=2
=> 2
irb(main):007:0> -x.abs
=> -2

So "dot" does have priority over "unary minus", but not over literal 
formation.

Why shouldn't literals always take precedence? Does it beak too many 
habits from ancestor languages (perl, as pointed out)? Is it too hard to 
parse?

-- 
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407