[ruby-dev:24313] Re: Procのブロック呼び出しメソッド名を自由に設定

From: Yukihiro Matsumoto <matz@...>
Date: 2004-09-22 19:07:04 UTC
List: ruby-dev #24313
まつもと ゆきひろです

In message "Re: [ruby-dev:24309] Re: Procのブロック呼び出しメソッド名を自由に設定"
    on Wed, 22 Sep 2004 21:42:02 +0900, Nowake <nowake@fiercewinds.net> writes:

|> それはどうなんだろう。考えてもみなかった発想ですが、フレキシ
|> ブルすぎてワケワカのプログラムを発生させそうです。
|
|ある意味逆転の発想ですからね。

ですねえ。

|根っこには従来のProcの不満点
|
|1.クロージャを実際に使用している部分のコードを読むときに、
|  「ブロックをcallする」というコードでは実際に何を行っているのか
|  わからないことがある。
|  ->どういう機能を実現するのか(コメント無しで)わかるようにしたい
|2.クロージャを使って多態をすると(callを使わなくてはならないので)
|  他のオブジェクトとの相性が悪い
|  ->他のオブジェクトと同じメソッドで扱いたい
|
|があります。

ふむ。クロージャというものはそれがどのような働きをするものか
は、変数名が示すものだと考えていました。だから、その名前(の
手続き)を実行するというのが唯一のメソッドだと。だからせいぜ
い「()」というメソッドを(callの別名として)用意するくらいしか
考えられませんでした。

が、野分さんの発想は基本的に「なんかするオブジェクトがあって、
それのメソッドを呼ぶ」わけですね。極端に言えばクロージャを指
している変数名はそれこそなんでもよくて、させたい仕事をメソッ
ドで指定する、と。

若干理解が進んで改めて考えると、ますます斬新な発想です。自分
の頭が固くなっていることを実感します。普段からJavaの無名クラ
スやC#のdelegateとかに親しんでいるとこういう発想が出てくるの
でしょうか。

|まつもとさんが危惧されているのは2.に関連する部分(Procを使っ
|て他のオブジェクトとのお手軽な多態を行ってしまい、Procなの
|か本物のオブジェクトなのか解らなくなる)かと思いますが、同
|じメッセージを受け付けることができるのならば使う側からは同
|種のオブジェクトとして扱っても問題無いでしょうから、それほ
|ど心配する必要は無いかと思います。

いやいや、クロージャを普通のオブジェクトのフリをさせるという
発想が完全に抜け落ちてましたから、思考を適合できなかったとい
うのが正直なところです。というか、まだ消化しきれてないんです
がね。このアイディアはクロージャのあり方を変えてしまいそうで
す。もうちょっと考えさせてください。

                                まつもと ゆきひろ /:|)

In This Thread