From: Yukihiro Matsumoto Date: 2010-06-17T06:31:04+09:00 Subject: [ruby-dev:41627] Re: [Feature:trunk] argument delegation まつもと ゆきひろです In message "Re: [ruby-dev:41625] Re: [Feature:trunk] argument delegation" on Thu, 17 Jun 2010 03:36:56 +0900, Yusuke ENDOH writes: |argument delegation は、 | |(1) ブロックを引き継がせたいだけ (引数は変えたい) ときに不便 |(2) 引数の変数へうっかり代入して、間違った引数が渡る事件が多発しそう |(3) define_method でサポートできていない (将来的にされる予定はある?) | |ので、あんまり好きじゃないです。 (1) については、ブロックを引き継がせたい時には、明示的にブロッ クを引き渡せばよい(ひとつのことをしたいときに、ひとつのこ とをすればよい。冗長性はない)ので、手当ての必要があるか どうか疑問です。今回の動機は「ひとつのことをするのに、ふ たつのことを書かないといけない」という冗長性ですから。 (2) これはsuperでもそうですよね。昔、superは引数の変数に代入 してもそのまま渡る仕様だったのですが、実装上の問題であき らめました。 (3) 将来的には、define_methodでもサポートされるべきだと思いま す。できてないのは実装上の制約だと思ってください。 |ブロックを引き継がせるのが面倒くさいという動機はとてもよくわかるので、 | | foo(a, b, c, &) | |と書いたらこのコンテキストのブロックを渡す、というのはどうでしょうか。 繰り返しになりますが、これでは「ひとつのことをするのに、ふた つのことを書かないといけない」という冗長性が解決できてません。 実質追加は2文字だから負担は軽くなりますが。 が、もともとの動機とは別として、「&」1文字でそのコンテキスト のブロックを渡すのは、面白いアイディアだと思います。この場合 は、仮引数リストのブロック引数がなくても、ブロックを渡すこと になるんですかね。 まつもと ゆきひろ /:|)