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