ささだです。

 引数無しの super (以降 zsuper)を呼び出すときのルールは、そのメソッド
の引数の形をそのままコピーしたものと同様にする、という話だったと思いま
す。つまり、

  def m(a, b=1, *c)

と定義されているとき、メソッド m 中で

   super

と書けば、

   super(a, b, *c)

と同様の意味であると思われます(オプション引数の代入は無視)。


 しかし、

class C
  def m(a, b)
  end
end

class D < C
  def m(a, *b)
    b[0] ||= 2 # (1引数だったら、引数を追加する)
    super
  end
end

D.new.m(1, 2)  # OK
D.new.m(1)     # wrong number of arguments (1 for 2) (ArgumentError)


このようなプログラムでは引数の数が違う、とエラーになります(ruby 1.9.0
(2005-11-18) [i386-cygwin])。

 これは、そのまま super を super(a, *b) として解釈していればエラーにな
らないと思います。

 この仕様はこういうものでしょうか。個人的には「単純に置き換えるだけ」と
いうルールが簡単なので、エラーにならない挙動がいいと思います。

-- 
// SASADA Koichi at atdot dot net