The operator precedence table at:
The Ruby Language
states that the exponentiation operator (**) has higher precedence than
the complement operator (~). Ditto for operator precedence in Python.
Yet the following program:
x = ~2**3
print x, “\n” # prints -27 in Ruby; prints -9 in Python
surprised me by printing -27 (I am using ruby 1.8.6).
BTW, the following program prints -9 in both Ruby and Python:
x = ~(2**3)
print x, “\n”
Is this a Ruby bug?
Thanks,
/-\
The new Internet Explorer 8 optimised for Yahoo!7: Faster, Safer,
Easier.
2009/3/26 Andrew S. [email protected]:
 x = ~2**3
According to the japanese reference
manual(http://doc.loveruby.net/refm/api/view/spec/operator),
this is not a bug.
I guess this precedence change was made on ruby 1.8.0
C:\work\ruby168\bin>ruby -v -e ‘p ~2**3’
ruby 1.6.8 (2002-12-24) [i586-mswin32]
-9
C:\work\ruby180\bin>ruby -v -e ‘p ~2**3’
ruby 1.8.0 (2003-08-04) [i386-mswin32]
-27
Regards,
Park H.
Heesob P. wrote:
ruby 1.8.0 (2003-08-04) [i386-mswin32]
-27
Thanks. Here’s another one that surprised me. Running:
y = 5 % x = 3
print “x=”, x, " y=", y, “\n”
produces:
x=3 y=2
That is, it seems that:
y = 5 % x = 3
is being parsed as:
y = 5 % (x = 3)
despite the % operator having a higher precedence than the = operator.
I expected it to be parsed as:
y = (5 % x) = 3
producing a syntax error.
If this is a deliberate feature, I’d be interested in learning more
about it.
If anyone knows a good reference on the Ruby parser, please let me know.
Thanks,
/-\
Enjoy a safer web experience. Upgrade to the new Internet Explorer
8 optimised for Yahoo!7. Get it now.