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
|