From: Yukihiro Matsumoto Date: 2010-06-17T14:53:37+09:00 Subject: [ruby-dev:41635] Re: [Feature:trunk] argument delegation まつもと ゆきひろです In message "Re: [ruby-dev:41634] Re: [Feature:trunk] argument delegation" on Thu, 17 Jun 2010 13:58:53 +0900, Shugo Maeda writes: |argument delegationについてはまだ態度を決めかねているのですが、 |super(...)が導入されたら、(警告を出すなどの移行ステップを経て) |括弧なしsuperはsuper()と同じ意味にしてしまってはどうでしょうか。 うーん、superがsuper()の意味であってうれしいのは、 * ルールが少なくなる * 無引数superの呼び出しが十分に多い のいずれかだと思うのですが、前者は結局はRubyの設計では優先度 が低い「一貫性」を高めるということなので、この際「うれしい」 とは評価しません。 後者ですが、これが実際的にうれしいのは * superを含むメソッドが引数を1個以上受け取り * superにはひとつも渡さない というケースだけで、superの使い道のうち多くを含む(と思われる) * superを含むメソッドが引数を1個以上受け取り * superにそのまま渡す 場合、これまでsuperだけですんだものをsuper(...)と書かねばなら ず、ちっともうれしくありません。 * superを含むメソッドが引数を1個以上受け取り * superには別の引数を渡す 場合、argment delegationは役に立たないのは事実ですが、それは superをsuper()にすることとは無関係でしょう。 |superではブロック引数への代入が反映されない動作になっていますが、 |argument delegationではどうなりますか? | | def foo(&b) | b = lambda { puts "lambda in foo" } | bar(...) | end | |というケースの話ですが。 「superと同じ動作」というのが基本だと思います。本当は、通常 引数も代入が反映されないようにしたいのですが、YARVの実装だと 難しいと聞いたような気がします。 まつもと ゆきひろ /:|)