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
···
--
Posted via http://www.ruby-forum.com/.
Alle lunedì 27 agosto 2007, Todd Burch ha scritto:
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
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
Stefano Crocco wrote:
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
···
--
Posted via http://www.ruby-forum.com/\.
Stefano Crocco wrote:
Alle lunedì 27 agosto 2007, Todd Burch ha scritto:
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
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
···
--
Jonas Roberto de Goes Filho (sysdebug)
http://goes.eti.br