From: Yukihiro Matsumoto Date: 2004-12-03T01:26:48+09:00 Subject: [ruby-dev:25033] Re: Method#to_proc とブロックの引渡し まつもと ゆきひろです In message "Re: [ruby-dev:25031] Method#to_proc とブロックの引渡し" on Thu, 2 Dec 2004 23:46:24 +0900, Masahiro Sakai (酒井政裕) writes: |ruby 1.9.0 (2004-12-01) で以下のプログラムを実行すると |no block given (LocalJumpError) となってしまうことに最近気づきました。 | | def y | yield | end | method(:y).call{ p :ok } #=> :ok | method(:y).to_proc.call{ p :ok } #=> no block given (LocalJumpError) | |ブロックがブロックを受け取れるようになった現在では、 |Method#to_procで作ったProcオブジェクトからメソッドyへと |ブロックが引き渡された方が自然ではないでしょうか。 ブロックから作られたProcの中でyieldが呼ばれた場合には、call に渡されたブロックではなく、ブロックの外側のブロックが呼ばれ るべきだと考えて現在の仕様にしていました。 しかし、メソッドからto_procで作られたProcにはそもそも「外側 のブロック」というものはないわけですし、yieldが呼ぶことを期 待されているブロックはやはり呼び出し元(call)に与えられたブロッ クのような気がしてきました。to_procで作られたProcを特別扱い することで実現できそうです。1.9で実装してしばらく様子を見る ことにしましょう。 まつもと ゆきひろ /:|)