当重写method_missing方法时,如何理解super?

3
class MyClass
  def method_missing(id,*args,&block)
    return A if something
    return B if something_else
    super
  end
end

如果A和B都没有返回值,那么会调用super,这将引发NoMethodError错误。我想在这里super是MyClass的超类。但是,由于我们仅仅调用了super而没有调用缺失的方法,所以会引发NoMethodError错误?

1个回答

4
你的假设是错误的。 super 不是 MyClass 的超类。它是在 MyClass 的父类上调用同名方法。

我明白了。所以method_missing方法会在MyClass的父类上再次被调用,对吗? - undefined
更准确地说,super 是对当前接收器的下一个祖先上具有相同名称的方法的调用,该祖先能够响应该方法。这可能是超类的方法,也可能是祖先链中的混入或单例类的方法。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接