From: Ralph Mason Date: 2001-11-14T07:46:55+09:00 Subject: [ruby-talk:25098] Re: exiting blox This has god me thinking about how, break, next and redo work in the scope of blocks. E.g. def myfunc 10.times { | i| puts "Calling block with #{i}"; yield( i ) } end myfunc() { |i| puts "Block called with #{i}" i; break if i > 4 } Works as expected. Although I put no code in the outter loop to action the break. How far up the stack would this break go? def myfunc2 yield 1 yield 2 yield 3 end myfunc2() {|i| puts i; break if i==2 } also works as per the first example. However in this case it appears to have exited the calling fucntion. What does ruby actually do when a break, or next or redo is encountered? Thanks ----- Original Message ----- From: "Robert Feldt" To: "ruby-talk ML" Sent: Wednesday, November 14, 2001 11:33 AM Subject: [ruby-talk:25094] Re: exiting blox > On Wed, 14 Nov 2001, Alan Chen wrote: > > > break also stops any subsequent yields to the block. I think Niko > > just wants to skip the rest of the block for that yield. > > > irb(main):003:0> [1,2,3].each {|e| e==2 ? break : p(e)} > 1 > nil > irb(main):004:0> [1,2,3].each {|e| e==2 ? next : p(e)} > 1 > 3 > [1, 2, 3] > > /Robert > >