From: Minero Aoki Date: 2003-06-24T00:48:47+09:00 Subject: [ruby-dev:20426] Re: 1.8.0 preview3 schedule 青木です。 In mail "[ruby-dev:20425] Re: 1.8.0 preview3 schedule" Minero Aoki wrote: > > |このように実際の動作と食い違います。 > > |またブロック引数の場合も同様で、next がエラーになりません。 > > > > すいません。nextはエラーになりません。説明の方が間違ってまし > > た。エラーになるのはretryです。 > > あ、なるほど。了解です。 やっぱり了解じゃありませんでした。 Proc.new ではなく lambda ブロックからの retry がエラーに なるのですが、こちらの説明文は next のままで正しいのでしょうか。 ~ % ruby-1.8.0 -e 'lambda { next }.call' ~ % ruby-1.8.0 -e 'lambda { break }.call' ~ % ruby-1.8.0 -e 'lambda { retry }.call' # エラーにならないのが正しい? -e:1:in `call': retry from proc-closure (LocalJumpError) from -e:1 ~ % ruby-1.8.0 -e 'Proc.new { next }.call' ~ % ruby-1.8.0 -e 'Proc.new { break }.call' -e:1:in `call': break from proc-closure (LocalJumpError) from -e:1 ~ % ruby-1.8.0 -e 'Proc.new { retry }.call' -e:1:in `call': retry from proc-closure (LocalJumpError) from -e:1 ([ruby-dev:20358] の解説を修正して再掲) * Proc.new およびブロック引数で与えられる Proc は 引数チェックがゆるい。break と retry が例外になる。 * lambda および proc が返す Proc は引数チェックが厳しい。 break と next は実行を中断する。 ↑retry? next? ------------------------------------------------------------------- 青木峰郎