ruby-reference-manual:3493
From: "pypypy567 (py _)" <redmine@r...>
Date: Mon, 4 Feb 2013 23:15:29 +0900
Subject: [ruby-reference-manual:3493] [るりまプロジェクト - Bug #5506] LocalJumpError の説明やサンプルコード実行結果がおかしい
Issue #5506 has been updated by pypypy567 (py _). File LocalJumpError.patch added 見てみて気付いたことだけ。 # 最初の説明に lambda という語を使うこと Proc#lambda? の無い 1.8 系での説明に入れていいかよく分からなかったので 1.8 系は変えませんでした。 # retry の削除 1.9 でイテレータ用の機能は削除されたんでしたっけ。 # 場合に -> 場合などに 少なくとも他にも内部で yield するメソッドにブロックを渡さなかった時にも発生します。 def foo; yield; end; foo とか。 # proc -> Proc.new proc は 1.8 系では lambda の alias だったので普通に return 出来ます。 1.9 ではよく分かりませんが Proc.new 相当でしょうか。 というわけで Proc.new に置き換えたほうが挙動がそろうと思います。 # Block -> Proc 古い ChangeLog によると Mon Dec 18 09:58:12 1995 Yukihiro Matsumoto <matz@c...> * version 0.94 * dln.c (dln_load): HP対応(未確認) * eval.c (Init_Proc): BlockをProcに改名. だそうです。 ---------------------------------------- Bug #5506: LocalJumpError の説明やサンプルコード実行結果がおかしい https://bugs.ruby-lang.org/issues/5506#change-35828 Author: azarashi (Hiroshi Koyama) Status: Assigned Priority: Normal Assignee: okkez (okkez _) Category: doc Target version: reporter: ruby_version: http://doc.ruby-lang.org/ja/1.9.2/class/LocalJumpError.html > def foo > proc { return 10 } > end > > begin > foo.call > rescue LocalJumpError => err > p err # => #<LocalJumpError: return from block-closure> > p err.reason # => :return > p err.exit_value # => 10 > end > > begin > Block.new { break 5 }.call > rescue LocalJumpError => err > p err # => #<LocalJumpError: break from block-closure> > p err.reason # => :break > p err.exit_value # => 5 > end foo.call を実行すると、#<LocalJumpError: return from block-closure> ではなく、 #<LocalJumpError: unexpected return> が発生しますぽよ。 あと、Blockというクラスが存在しないので、実行できませんぽよ。 Procに変更すれば、#<LocalJumpError: break from proc-closure> が発生しますぷよ。 さらに、上部に > return, break, retry のいずれかを実行すると発生します。 という記述があるけど、retry の場合は SyntaxError となりますぷお。 $ ruby -v ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux] $ cat test.rb def foo proc { return 10 } end begin foo.call rescue LocalJumpError => err p err # => #<LocalJumpError: return from block-closure> p err.reason # => :return p err.exit_value # => 10 end begin Block.new { break 5 }.call rescue LocalJumpError => err p err # => #<LocalJumpError: break from block-closure> p err.reason # => :break p err.exit_value # => 5 end $ ruby test.rb #<LocalJumpError: unexpected return> :return 10 test.rb:14:in `<main>': uninitialized constant Object::Block (NameError) -- http://bugs.ruby-lang.org/ -- ML: ruby-reference-manual@m... Info: http://QuickML.com/