From: "K.Kosako" Date: 2001-04-02T19:09:41+09:00 Subject: [ruby-dev:12734] Re: rb_f_send 石塚圭樹さんの<200104020946.SAA06887.keiju@ishitsuka.com>から > ># 石塚さんのForwardableを見て、 > ># ブロックを手続き化して__send__で渡すコストをなくせれば > ># さらに良いのではないかと思ったんですが... > > これって, > > >def foo > > self.__send__(:bar, *opts) &block > >end > > と定義するのではなく > > def foo > self.bar(*opts) &block > end > > と定義すればってことですかね? 違います。書き方が変でした。 __send__を呼び出した側と、__send__で呼び出された側のメソッドが、 同じブロックを使用できる仕様(間接的に呼ばれたことを意識しない)であれば、 &block自体を書かなくても呼び出されたメソッド側で、そのままyieldできるので、 手続きオブジェクトの生成コストがなくなると思ったのです。 def foo __send__(:bar, *opts) end def bar(*opts) ... if block_given? yield end end 実際には__send__はそういう仕様ではないので、 私の書いたことには何の意味もありませんでした。 お騒がせしました。 ---- 小迫@ソフネック 渋谷区恵比寿1-15-1