まつもと ゆきひろです

なんと何年も気がつかなかったのですが、現在のRubyは

  class C
    def m(a,b,c)
      p [a,b,c]
    end
  end

  class CC<C
    def m(a,b,c=100)
#     eval("k=2")    
      a=200
      super
    end
  end

  CC.new.m(1,2,3)

と呼び出した時には[100,2,3]を出力します。つまりこれは引数を
上書きするとsuperは上書きされた引数を渡してしまうということ
です。

ところが、引数への代入前にコメントアウトしているevalの呼び出
しを活かしたり、あるいは引数リストに*restを加えたりすると動
作が変わります。

調べてみると1.2までは引数への代入は引数なしのsuperに影響を与
えません。どうやら、1.3の間に変化したのに気がついてなかった
ようです。

これはいかにもまずいので、引数に代入してもsuperのデフォルト
で渡される引数は元のまま渡されることにしようと思います。

反対の人はいますか。