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.

>Phil

E