Date: Fri, 13 Feb 2004 17:04:33 +0100
From: Robert Klemme <
[email protected]>
Newsgroups: comp.lang.ruby
Subject: Re: return from yielded block
Ara.T.Howard said:
Date: Fri, 13 Feb 2004 15:08:34 +0900
From: (e-mail address removed)
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...