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