Forum: Ruby Operator precedence of exponentiation (**) and complement (~)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
529c7a41de54f1ea75adaf230bba32e8?d=identicon&s=25 Andrew Savige (Guest)
on 2009-03-26 07:03
(Received via mailing list)
The operator precedence table at:

 http://phrogz.net/ProgrammingRuby/language.html#table_18.4

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.
666b4e17b4bb0e2d999037a25f65a7cb?d=identicon&s=25 Heesob Park (phasis)
on 2009-03-26 07:52
(Received via mailing list)
2009/3/26 Andrew Savige <ajsavige@yahoo.com.au>:
>  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 Heesob
529c7a41de54f1ea75adaf230bba32e8?d=identicon&s=25 Andrew Savige (Guest)
on 2009-03-26 21:07
(Received via mailing list)
Heesob Park 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.
This topic is locked and can not be replied to.