From: "K.Kosako" Date: 2001-04-02T17:38:19+09:00 Subject: [ruby-dev:12729] rb_f_send __send__を使用して呼び出されるメソッド内でも、 元のメソッドと同じブロック環境を利用できることが 仕様であれば、rb_f_send()のバグかな(?)と思います。 # 石塚さんのForwardableを見て、 # ブロックを手続き化して__send__で渡すコストをなくせれば # さらに良いのではないかと思ったんですが... def foo self.__send__(:bar) end def bar puts "bar" p block_given? # => false yield # => yield called out of block (LocalJumpError) end foo { puts "block"; p block_given? } --- eval.c.orig Wed Mar 28 17:43:24 2001 +++ eval.c Mon Apr 2 16:58:01 2001 @@ -4512,7 +4512,7 @@ if (argc == 0) rb_raise(rb_eArgError, "no method name given"); vid = *argv++; argc--; - PUSH_ITER(rb_block_given_p()?ITER_PRE:ITER_NOT); + PUSH_ITER(rb_f_block_given_p()?ITER_PRE:ITER_NOT); vid = rb_call(CLASS_OF(recv), recv, rb_to_id(vid), argc, argv, 1); POP_ITER(); ---- 小迫@ソフネック 渋谷区恵比寿1-15-1