こんばんは、野分です。

Matzにっきの2004-09-10でまつもとさんが『callを省略する』で「Rubyのクロー
ジャはcallメソッドを使わないと呼び出せないので、ちょっと気持ち悪い」と述
べていますが、callメソッドが気持悪いのならば、クロージャを呼び出すメソッ
ドを自由に設定できるようにしたらどうでしょうか?

Procの例ですが、

m = Proc.new( :to_s ) { 'test1' }
p m.to_s   # => 'test1'

といった感じですね。クロージャごとに適切なメソッドを定義して、そのメッセー
ジを受けたときにブロックを実行します。

他のオブジェクトを操作するときも結局(メソッドで)メッセージを送るのです
から、クロージャを呼ぶときにメッセージを送るのは別に構わないかな、と思い
ます。

#確かにcallしかメッセージを受け付けないのはカッコわるいと思いますが。




参考に、上記の例は下記のクラスで実装可能です。

class MethodProc < Proc
  def initialize( *method_name, &procedure )
    super( &procedure )
    m = Module.new
    method_name.each do | i |
      m.__send__( :define_method, i, &procedure )
    end
    self.extend( m )
  end
end