What is happening with this Unary minus?

T

Todd Burch

LOOPER = 6

-(LOOPER).upto(LOOPER) {|i|
puts i }

I get one line of output: 6

However, I get 13 lines of output here:

(-LOOPER).upto(LOOPER) {|i|
puts i }

What is happening with the unary minus on the first example? I expected
to get identical output.

Todd
 
S

Stefano Crocco

Alle luned=C3=AC 27 agosto 2007, Todd Burch ha scritto:
LOOPER =3D 6

-(LOOPER).upto(LOOPER) {|i|
puts i }

I get one line of output: 6

However, I get 13 lines of output here:

(-LOOPER).upto(LOOPER) {|i|
puts i }

What is happening with the unary minus on the first example? I expected
to get identical output.

Todd

I'm not completely sure, but I think the difference arises because of opera=
tor=20
precedence. The first expression is interpreted as

=2D(LOOPER.upto(LOOPER){|i| puts i})

Since the lower and upper bounds are equal, the iteration is performed only=
=20
one time. The - is then applied to the return value of upto (the receiver,=
=20
i.e LOOPER). Indeed, if you try your code in irb, you'll see that the value=
=20
of the expression is -6.

In the second case, using brackets you tell the interpreter that the upto=20
method should not be called on LOOPER, but on (-LOOPER), that is on -6.

I hope this helps

Stefano
 
T

Todd Burch

Stefano said:
Alle lunedì 27 agosto 2007, Todd Burch ha scritto:

I'm not completely sure, but I think the difference arises because of
operator
precedence. The first expression is interpreted as

Stefano

Hi Stefano. I see that now. I did this:

result = -(LOOPER).....
puts result

and I see the minus applied now. Thanks!

Todd
 
J

Jonas Roberto de Goes Filho (sysdebug)

Stefano said:
Alle lunedì 27 agosto 2007, Todd Burch ha scritto:


I'm not completely sure, but I think the difference arises because of operator
precedence. The first expression is interpreted as

-(LOOPER.upto(LOOPER){|i| puts i})

Since the lower and upper bounds are equal, the iteration is performed only
one time. The - is then applied to the return value of upto (the receiver,
i.e LOOPER). Indeed, if you try your code in irb, you'll see that the value
of the expression is -6.

In the second case, using brackets you tell the interpreter that the upto
method should not be called on LOOPER, but on (-LOOPER), that is on -6.

I hope this helps

Stefano
This is correct. On the first example, the loop is
(LOOPER).upto(LOOPER) {|i| puts i } added post minus operator
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,007
Latest member
OrderFitnessKetoCapsules

Latest Threads

Top