dax*_*rod 9 ruby language-design super
为什么这样设计?
Ruby的设计倾向于尽可能多地实现方法; 关键字通常保留用于具有自己的语法规则的语言功能.super但是,外观和行为就像一个方法调用.
(我知道super在纯Ruby中实现它会很麻烦,因为它必须解析方法名称caller,或者使用trace_func.仅此一项不会阻止它成为一种方法,因为很多内核的方法都是没有在纯Ruby中实现.)
它的行为有点不同,因为如果你不传递参数,所有当前的参数(和块,如果存在的话)都会被传递......我不确定它将如何作为一种方法.
给出一个相当人为的例子:
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()).
它与方法调用的行为完全不同.
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |