二重ループ
def twin_loop(a,b) a.each {|x| b.each {|y| yield(x,y) }} end
と書いてみたが,
twin_loop(ARGF, rexs) {|l,x| if x =~ l puts "#{ARGF.filename} #{ARGF.file.lineno}:#{l}" flag_found = true break end }
は
ARGF.each {|l| rexs.each {|x| if x =~ l puts "#{ARGF.filename} #{ARGF.file.lineno}:#{l}" flag_found = true break # 一つでも見つけたらその行のチェックはやめる end } }
と等価にならず,breakで外のループも抜けてしまう.当たり前か.
適当にtwin-loopとか書いたけど,正しくはnested-loop?英語は分りません.