咳といいます。 たすけてください。ruby-1.6.2です。 Procの中でbreakやretryを使うと LocalJumpError 例外が発生して "break from proc-closure" とか "retry from proc-closure" とか 戻っていたと思うのですが break で例外が発生してくれません。 1.4系だと動作した記憶があるのですが… ---- proc = Proc.new do |n| p n break if n == :break retry if n == :retry end begin proc.call(:retry) rescue p $! #=> #<LocalJumpError: retry from proc-closure> end begin proc.call(:break) rescue p $! #=> ?? end ---- それからブロック付きメソッドにブロックを書いてもProcを渡しても ほぼ同じように動くとおもっていたのですが、勘違いでしょうか ? (自信ない…) ---- (1..5).each do |n| puts n break if n == 3 end puts 'done' proc = Proc.new do |n| puts n break if n == 3 # ←を retry にすると LocalJumpError end (1..5).each(&proc) puts 'done' ---- 1 2 3 done 1 2 3 a.rb:10: unexpected break ---- a.rb:10: unexpected break" というのはなんでしょう? 例外ではない ?? = 質問のまとめ。 ProcがretryやbreakしたことをLocalJumpErrorで捕まえることで dRubyのブロック付きメソッドを実現していました。 1.6.2でProcがbreakしたことを知る方法はありますか? (retryはLocalJumpErrorが発生するので知ることができました。)