From: Robert Klemme Date: 2004-02-14T01:09:55+09:00 Subject: Re: return from yielded block "Ara.T.Howard" 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... :-) Regards robert