yarv-dev:128
From: SASADA Koichi <ko1 atdot.net>
Date: Tue, 27 Jul 2004 08:32:20 +0900
Subject: [yarv-dev:128] variable length argument
ささだです。
今日、ふと日記に書いたようなことを思いついたのですが、
可変長引数があったとき、そのときのメソッド引数リストを全部保存
してますよね。
このとき、可変長引数部分のみを保存するようにするのはRuby的
に合法でしょうか。なんかまた重箱の隅で undocumented な部分な
気がするんですが。
提案:可変長引数のとき、保存するのは可変長引数部分のみにする
現状は引数リストを全部保存するから
class C
def m a,b,c
p a,b,c
end
end
class CC < C
def m a, b,c=300,*d
a = 100
super
end
end
CC.new.m 1,2,3 # (A)
が 1,2,3 と出力され、
CC.new.m 1,2 # (B)
が引数が足りない、とエラーになります。
これを、保存するのは可変長引数部分のみ(d)として、
(A) のときに 100, 2, 3, (B) のときに 100, 2, 300 とな
るようにするという感じです。
現状、可変長引数がない場合は引数が保存されないため、
提案手法のほうが自然な気がするんですが、どうでしょう。
ちなみに、ためしたバージョンは
ruby 1.9.0 (2004-06-30) [i386-mswin32] です。
処理系コスト的には、
pros. 可変長引数メソッドの呼び出し時、保存する要素数が減る
cons. super 呼び出し時、余分な処理が増える
多分、後者はあんまり数は多くないと思います。
現在の実装で、事実誤認があったらすみません、ご指摘ください。
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml
-> 128 2004-07-27 08:32 [ko1 atdot.net ] variable length argument 129 2004-07-27 08:57 ┗[matz ruby-lang.org ] 130 2004-07-27 10:00 ┗[matz ruby-lang.org ] 131 2004-07-27 11:00 ┗[ko1 atdot.net ] 132 2004-07-27 11:28 ┗[matz ruby-lang.org ] 133 2004-07-27 11:38 ┗[ko1 atdot.net ]