为什么'super'是关键字而不是Ruby中的方法?

dax*_*rod 9 ruby language-design super

在Ruby中,super关键字而不是方法.

为什么这样设计?

Ruby的设计倾向于尽可能多地实现方法; 关键字通常保留用于具有自己的语法规则的语言功能.super但是,外观和行为就像一个方法调用.

(我知道super在纯Ruby中实现它会很麻烦,因为它必须解析方法名称caller,或者使用trace_func.仅此一项不会阻止它成为一种方法,因为很多内核的方法都是没有在纯Ruby中实现.)

d11*_*wtq 5

它的行为有点不同,因为如果你不传递参数,所有当前的参数(和块,如果存在的话)都会被传递......我不确定它将如何作为一种方法.

给出一个相当人为的例子:

class A
  def example(a, b, c)
    yield whatever(a, b) + c
  end
end

class B < A
  def example(a, b, c)
    super * 2
  end
end
Run Code Online (Sandbox Code Playgroud)

我不需要处理yield,也不需要传递参数super.在您特别想要传递不同参数的情况下,它的行为更像是方法调用.如果您想要根本不传递任何参数,则必须传递空括号(super()).

它与方法调用的行为完全不同.