From: ptkwt@... (Phil Tomson) Date: 2005-03-27T04:54:48+09:00 Subject: Re: Evaluator for a mini-Ruby in Haskell In article <9uuQtIOA.1111864906.5153320.ruerue@bidwell.textdrive.com>, Saynatkari wrote: > >In data 3/26/2005, "(Phil Tomson)" ha scritto: > >>In article <3alo9bF6d2vo8U1@individual.net>, >>Robert Klemme 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