In data 3/26/2005, "Saynatkari" <ruby-ml / magical-cat.org> ha scritto:

>
>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.

Er, defined 'correctly', that is. It'll just be the
current value of i. Otherwise a novel approach!

>>Phil
>
>E

E