ptkwt
3/26/2005 7:31:00 PM
In article <9uuQtIOA.1111864906.5153320.ruerue@bidwell.textdrive.com>,
Saynatkari <ruby-ml@magical-cat.org> wrote:
>
>In data 3/26/2005, "(Phil Tomson)" <ptkwt@aracnet.com> ha scritto:
>
>>In article <3alo9bF6d2vo8U1@individual.net>,
>>Robert Klemme <bob.news@gmx.net> wrote:
>>>
>>>
>>>I'm surprised about "retry", too. His analysis sounds all very resonable -
>>>only that "break" does not work for me but "return" does:
>>>
>>>>> def my_while(cond)
>>>>> break unless cond
>>>>> yield
>>>>> retry
>>>>> end
>>>=> nil
>>>>> i = 0
>>>=> 0
>>>>> my_while i < 10 do
>>>?> puts i
>>>>> i += 1
>>>>> end
>>>0
>>>1
>>>2
>>>3
>>>4
>>>5
>>>6
>>>7
>>>8
>>>9
>>>LocalJumpError: unexpected break
>>> from (irb):2:in `my_while'
>>> from (irb):7
>>
>>
>>Hmmm... break works find for me in 1.8.2. Time to upgrade?
>>
>>
>>>
>>>Btw, can anybody think of a way to make my_while return the result of the
>>>last block evaluation? It seems impossible because the return occurs before
>>>the yield...
>>>
>>
>>
>>How about:
>>
>> def my_while(cond)
>> return @ret unless cond
>> @ret = yield
>> retry
>> end
>
>@ret may not be defined at that point of evaluation.
>
Ah, true. If you did something like:
my_while false do
#foo
end
it would return nil, since @ret never got defined. Maybe that wouldn't
be too bad, though.
what would you want returned in this case:
i = 10
my_while i<10 do
puts i
i+=1
end
?
Phil