[前][次][番号順一覧][スレッド一覧][生データ]

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       ]