4

我注意到一个类中的一些非常奇怪的行为,我不小心在一个没有超类的类上调用了 super。显然我不应该调用 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)

为什么会发生第二个 Argument 错误,为什么不会发生与在不存在的超类上调用 super 相关的更具体的错误?

4

1 回答 1

4

SomeClass隐式扩展ObjectObject具有隐式无参数initialize方法。

使用superbare(即没有args 或parens)向超类发送与子类收到的相同消息。在您的示例中,使用superinSomeClass#initialize(arg)实际上是发送#initialize(arg)到 Object - 因此出现错误。

没有更具体的错误的原因是它不是特殊情况。

于 2013-01-28T20:11:03.467 回答