[1].each{ break }
は無問題。
f = proc { break } [1].each(&f)
は
in `each': break from proc-closure (LocalJumpError)
となる。差別だよ。撤廃撤廃。[ruby-dev:12070]。orz
状況によって Array#eachと Array#reverse_eachを使い分けたくて、でも処理内容は一緒だからブロックを使いまわそうとして、予め Procオブジェクトにしておいたら上記のエラーに遭遇した、と。
def hoge(&block) puts 'hoge start' yield puts 'hoge end' end hoge { puts 'next'; next } hoge { puts 'break'; break }
これ↑の実行結果はこう↓なる。
hoge start next hoge end hoge start break
ブロックで breakすると、hogeの yieldより後ろが実行されてない。
def hoge(&block) puts 'hoge start' begin yield ensure puts 'hoge end' end end hoge { puts 'next'; next } hoge { puts 'break'; break }
こう↑すると勝手に実行をスキップされない。
hoge start next hoge end hoge start break hoge end
yieldの呼び出しには注意が必要だったのだな。
そういうことです。補足はありません。