新井です。 バグ報告と仕様検討のリクエストということで ruby-dev へ。 # なぜか、rubyist ML では ruby-dev ネタが発生する(^^; In message "[rubyist:1343] Re: another sample for the Method" on 16 Apr 2002 08:57:18 +0900, Nobuyoshi Nakada <nobu.nokada / softhome.net> wrote: > なかだです。 > > At Tue, 16 Apr 2002 07:48:48 +0900 (JST), > Koji Arai wrote: > > そういえば、最近 Method オブジェクトの使い道を実例として示そ > > うと考えていたのですが(とりあえず書いちゃいましたが)、どうも > > うまい例が思い付かず私の中では「Ruby に Method オブジェクト > > はいらないや」という結論に達しました。 > > > > 「これこそ Method オブジェクトの存在意義だ」という例をどなた > > かお持ちでないでしょうか? > > to_procでブロックに渡すという使い方をしたことがあります。 うぉ、Method も &引数に渡せるのかあ。もしかして、to_proc を 持つオブジェクトならなんでも?っと期待したけどそうじゃないで すね。Method クラスや、そのサブクラス限定ですね。 怪しいなあっと思ってテストしてみたら UnboundMethod を渡すと SEGVしました(^^; class Foo def foo p "foo" end end def foo yield end foo &Foo.instance_method(:foo) -:3: [BUG] Segmentation fault ruby 1.7.2 (2002-04-12) [i586-linux] # 最近、忙しくて ruby を追えてません。試した ruby のバージョ # ンが低くて申し訳ありません。 > set_trace_func proc { |event, file, line, id, binding, klass, *rest| > DEBUGGER__.context.trace_func event, file, line, id, binding, klass > } > > よりも > > set_trace_func(&DEBUGGER__.context.method(:trace_func)) > > のほうが簡単だとか。 うーむ。うまい説明文句が思い付かないです。力不足ですみません。 少なくとも単にメソッド呼出しの & には Method オブジェクトも 渡せますとマニュアルに書けと言うことでしょうね。そうします。 to_proc を定義したオブジェクトは & を使ってブロックとして渡 せるというように仕様を変えるのはどうでしょう?もちろん、 to_proc が Proc を返さなければ例外ということで。 -- 新井康司 (Koji Arai)