On Fri, 13 Feb 2004, Robert Klemme wrote:

> Date: Fri, 13 Feb 2004 17:04:33 +0100
> From: Robert Klemme <bob.news / gmx.net>
> Newsgroups: comp.lang.ruby
> Subject: Re: return from yielded block
> 
> 
> "Ara.T.Howard" <ahoward / fattire.ngdc.noaa.gov> schrieb im Newsbeitrag
> news:Pine.LNX.4.44.0402130622000.31453-100000 / fattire.ngdc.noaa.gov...
> > On Fri, 13 Feb 2004 nobu.nokada / softhome.net wrote:
> >
> > > Date: Fri, 13 Feb 2004 15:08:34 +0900
> > > From: nobu.nokada / softhome.net
> > > Newsgroups: comp.lang.ruby
> > > Subject: Re: return from yielded block
> > >
> > > Hi,
> > >
> > > At Fri, 13 Feb 2004 14:54:56 +0900,
> > > Ara.T.Howard wrote in [ruby-talk:92771]:
> > > > the problem is that you can't 'return' from a block - so how is this
> done?
> > >
> > > Return to where?  The next statement of yield?
> > > If so, you may want "next".
> >
> > return a value.  i was not clear enough, let me try again:
> >
> > def meth s
> >   x =
> >     block_meth do
> >       if s =~ /forty/
> >         return 40
> >       else
> >         return 0
> >       end
> >     end
> >   x + 2
> > end
> >
> > def block_meth; yield; end
> >
> > p(meth('forty')) # this prints 40 - i want it to print 42
> 
> Simply delete the "return"'s:
> 
> irb(main):001:0> def meth s
> irb(main):002:1>   x =
> irb(main):003:1*     block_meth do
> irb(main):004:2*       if s =~ /forty/
> irb(main):005:3>         40
> irb(main):006:3>       else
> irb(main):007:3*         0
> irb(main):008:3>       end
> irb(main):009:2>     end
> irb(main):010:1>   x + 2
> irb(main):011:1> end
> => nil
> irb(main):012:0>
> irb(main):013:0* def block_meth; yield; end
> => nil
> irb(main):014:0>
> irb(main):015:0* p(meth('forty')) # this prints 40 - i want it to print 42
> 42
> => nil
> irb(main):016:0>
> 
> I guess you are aware of the fact that this kind of construction is a bit,
> err, complicated and your real world code does a lot more in between...  :-)

yes.  and yes - about 1700 lines to be exact ;-)

nobu's reply was the answer - your response works here but i also had a bunch
of stuff after the if/else/end : it was not the default return value.  for
some reason i just didn't explain myself well enough - sorry.  the bottom line
is that i needed a way to prematurely 'return' a value from a yielded block
under $DEBUG/$NOOP conditions for testing...

cheers.

-a
-- 
===============================================================================
| EMAIL   :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
| PHONE   :: 303.497.6469
| ADDRESS :: E/GC2 325 Broadway, Boulder, CO 80305-3328
| URL     :: http://www.ngdc.noaa.gov/stp/
| TRY     :: for l in ruby perl;do $l -e "print \"\x3a\x2d\x29\x0a\"";done 
===============================================================================