From: Orion Hunter Date: 2003-04-25T02:32:37+09:00 Subject: block.call vs. yield I noticed that the use of block/yield differs slightly when a "break" is called in the code. For example: class Array def myI() self.each{ |aa| yield(aa) } end end [0,1,2].myI { |xx| [10,20,30].myI { |yy| break if(yy==20 and xx==0); puts "#{xx}:#{yy}" }}' RESULT: 0:10 1:10 1:20 1:30 2:10 2:20 2:30 ============================================== class Array def myI(&blk) self.each{ |aa| blk.call(aa) } end end [0,1,2].myI { |xx| [10,20,30].myI { |yy| break if(yy==20 and xx==0); puts "#{xx}:#{yy}" }}' RESULT: 0:10 0:30 # This result was not expected 1:10 1:20 1:30 2:10 2:20 2:30 My question is, why, when using the second method, does the "break" not seem to break completely out of the loop, but rather acts like a "next" by terminating the current unit of iteration. I would not expect to get the "0:30" result. I was under the impression that block.call/yeild were synonymous. _________________________________________________________________ The new MSN 8: smart spam protection and 2 months FREE* http://join.msn.com/?page=features/junkmail