[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Ruby math parenthesis wierdness

Tom Verbeure

5/25/2008 6:46:00 PM

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
6 Answers

Phlip

5/25/2008 7:28:00 PM

0

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

That's the same as 5*( 1.0 ; -(1.0/2.0) )

The linefeed, without a trailing operator before it, upgrades to a
statement break. And (a;b) returns b.

You just need this:

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

Gregg Kang

5/25/2008 7:38:00 PM

0

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

Mikael Høilund

5/25/2008 7:41:00 PM

0


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

> All,
>
> The code below:
>
> m =3D 5*(
> (1.0)

This is the cause of the unexpected behavior. =46rom what I can see, =20
Ruby is interpreting the newline after (1.0) as a statement separator. =20=

Compare:

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

What's actually happening is that the third line (- (1.0/2.0)) is seen =20=

as a separate statement, not as a continuation on the second line. The =20=

minus sign in the beginning of the line is interpreted as the unary =20
negation operator, not the binary (as in relating to two numbers, not =20=

one) subtraction operator.

This works, however:

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

A quick irb session also illustrates my point:

>> 1.0
=3D> 1.0
>> -1.0/2.0
=3D> -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=F8ilund



Gregg Kang

5/25/2008 7:42:00 PM

0

I see. Thanks Phlip!

Tom Verbeure

5/25/2008 7:46:00 PM

0


> Hope this helps

Yes, definitely.

Thanks All!
Tom

Dave Bass

5/25/2008 9:52:00 PM

0

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-....