[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]