From: SASADA Koichi Date: 2010-08-17T13:27:38+09:00 Subject: [ruby-dev:42047] Re: Procのブロック呼び出しメソッド名を自由に設定  ささだです.  この話ってどうなりましたかね.結構,ほしいなぁ,と思う場面もあるんです が.特殊な each を持つオブジェクトとか,クラス作るまでもないなぁ,みたいな. daily = lambda(:each){ d = Date.new while d < end_date yield d d += 1end end } みたいな. def (daily = Object.new).each ... end みたいにしてもできるといえばできるんですが,引数とかに入れるのは不向きで すよね. (2004/09/23 4:07), Yukihiro Matsumoto wrote: > まつもと ゆきひろです > > 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なの > |か本物のオブジェクトなのか解らなくなる)かと思いますが、同 > |じメッセージを受け付けることができるのならば使う側からは同 > |種のオブジェクトとして扱っても問題無いでしょうから、それほ > |ど心配する必要は無いかと思います。 > > いやいや、クロージャを普通のオブジェクトのフリをさせるという > 発想が完全に抜け落ちてましたから、思考を適合できなかったとい > うのが正直なところです。というか、まだ消化しきれてないんです > がね。このアイディアはクロージャのあり方を変えてしまいそうで > す。もうちょっと考えさせてください。 > > まつもと ゆきひろ /:|) > -- // SASADA Koichi at atdot dot net