From: Nowake Date: 2004-09-22T00:40:37+09:00 Subject: [ruby-dev:24302] Procのブロック呼び出しメソッド名を自由に設定 こんばんは、野分です。 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