新井です。

バグ報告と仕様検討のリクエストということで 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)