|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
> 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) ) |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
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 s Mikael H=F8ilund |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
I see. Thanks Phlip!
|
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
> Hope this s Yes, definitely. Thanks All! Tom |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
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/. |
|
![]() |
| Outils de la discussion | |
|
|