From: Stefano Crocco Date: 2007-08-28T00:27:27+09:00 Subject: Re: What is happening with this Unary minus? 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