On 11/4/06, Joel VanderWerf <vjoel / path.berkeley.edu> wrote: > 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? Good points, I don't know. Jacob Fugal