4

スーパークラスのないクラスで誤ってスーパーを呼び出していたクラスで、非常に奇妙な動作に気付きました。明らかに、私は super を呼び出すべきではありませんでしたが、エラーが非常に奇妙であることがわかりました:

class SomeClass

  def initialize(someparam)
    super
  end

end

それで:

SomeClass.new() # ArgumentError: wrong number of arguments (0 for 1)
SomeClass.new('cow') # ArgumentError: wrong number of arguments (1 for 0)

なぜ 2 番目の Argument エラーが発生し、存在しないスーパークラスでの super の呼び出しに関連するより具体的なエラーが発生しないのはなぜですか?

4

1 に答える 1

4

SomeClass暗黙的に拡張ObjectされObject、暗黙的なno-argsinitializeメソッドがあります。

ベアを使用するsuperと(つまり、引数や親がない場合)、サブクラスが受信したのと同じメッセージがスーパークラスに送信されます。あなたの例では、inを使用superすると、実際にはObjectSomeClass#initialize(arg)に送信されるため、エラーが発生します。#initialize(arg)

より具体的なエラーがない理由は、それが特別な状況ではないためです。

于 2013-01-28T20:11:03.467 に答える