From: Yukihiro Matsumoto Date: 2004-09-23T04:07:04+09:00 Subject: [ruby-dev:24313] Re: Procのブロック呼び出しメソッド名を自由に設定 まつもと ゆきひろです In message "Re: [ruby-dev:24309] Re: Procのブロック呼び出しメソッド名を自由に設定" on Wed, 22 Sep 2004 21:42:02 +0900, Nowake writes: |> それはどうなんだろう。考えてもみなかった発想ですが、フレキシ |> ブルすぎてワケワカのプログラムを発生させそうです。 | |ある意味逆転の発想ですからね。 ですねえ。 |根っこには従来のProcの不満点 | |1.クロージャを実際に使用している部分のコードを読むときに、 | 「ブロックをcallする」というコードでは実際に何を行っているのか | わからないことがある。 | ->どういう機能を実現するのか(コメント無しで)わかるようにしたい |2.クロージャを使って多態をすると(callを使わなくてはならないので) | 他のオブジェクトとの相性が悪い | ->他のオブジェクトと同じメソッドで扱いたい | |があります。 ふむ。クロージャというものはそれがどのような働きをするものか は、変数名が示すものだと考えていました。だから、その名前(の 手続き)を実行するというのが唯一のメソッドだと。だからせいぜ い「()」というメソッドを(callの別名として)用意するくらいしか 考えられませんでした。 が、野分さんの発想は基本的に「なんかするオブジェクトがあって、 それのメソッドを呼ぶ」わけですね。極端に言えばクロージャを指 している変数名はそれこそなんでもよくて、させたい仕事をメソッ ドで指定する、と。 若干理解が進んで改めて考えると、ますます斬新な発想です。自分 の頭が固くなっていることを実感します。普段からJavaの無名クラ スやC#のdelegateとかに親しんでいるとこういう発想が出てくるの でしょうか。 |まつもとさんが危惧されているのは2.に関連する部分(Procを使っ |て他のオブジェクトとのお手軽な多態を行ってしまい、Procなの |か本物のオブジェクトなのか解らなくなる)かと思いますが、同 |じメッセージを受け付けることができるのならば使う側からは同 |種のオブジェクトとして扱っても問題無いでしょうから、それほ |ど心配する必要は無いかと思います。 いやいや、クロージャを普通のオブジェクトのフリをさせるという 発想が完全に抜け落ちてましたから、思考を適合できなかったとい うのが正直なところです。というか、まだ消化しきれてないんです がね。このアイディアはクロージャのあり方を変えてしまいそうで す。もうちょっと考えさせてください。 まつもと ゆきひろ /:|)