Ruby math parenthesis wierdness

All,

The code below:

m = 5*(
       (1.0)
       - (1.0/2.0)
       )
puts m
m = 5*(
       (1.0) - (1.0/2.0)
       )
puts m

prints out:

bash-3.2$ ./run.rb
-2.5
2.5

The second result is what I expect, but I don't understand the first
result.

I usually put operands at the end of the line instead of the
beginning, so I never ran into this before, but this was originally
Python code that I converted into ruby.

Any insights?

Thanks,
Tom

I'm getting this type of issue too. It looks like any number you put
after the first paren '(' is ignored.

All these examples produce -20

m = 10*(123
-2)
puts m

···

----

m = 10*(10000000
-2)
puts m

---
m = 10*(-10000000
-2)
puts m

All,

The code below:

m = 5*(
      (1.0)

This is the cause of the unexpected behavior. From what I can see, Ruby is interpreting the newline after (1.0) as a statement separator. Compare:

puts 5*(
   (1.0);
   - (1.0/2.0)
)

What's actually happening is that the third line (- (1.0/2.0)) is seen as a separate statement, not as a continuation on the second line. The minus sign in the beginning of the line is interpreted as the unary negation operator, not the binary (as in relating to two numbers, not one) subtraction operator.

This works, however:

puts 5*(
   (1.0) -
   (1.0/2.0)
)

A quick irb session also illustrates my point:

>> 1.0
=> 1.0
>> -1.0/2.0
=> -0.5
>>
>> 1.0 -
?> 1.0/2.0

The fact that the last prompt is "?>", not ">>" is the key point here.

Hope this helps
Mikael Høilund

···

On May 25, 2008, at 20:49, Tom Verbeure wrote:

I see. Thanks Phlip!

Hope this helps

Yes, definitely.

Thanks All!
Tom

If you make the line continuations explicit by adding backslashes, Ruby
gives the correct answer:

irb(main):005:0> m = 5*( \
irb(main):006:1* (1.0) \
irb(main):007:1* - (1.0/2.0) \
irb(main):008:1* )
=> 2.5

···

--
Posted via http://www.ruby-forum.com/.