Ruby重新打开类——可以访问重写的方法



我知道如果我将String类的子类化并覆盖其capitalize方法,我可以用super调用String类的capitalize版本。如果我重新打开String类并重写大写方法会怎样?有没有一种方法可以调用该方法的早期版本?

不开箱即用。一种常见的方法是将现有方法重命名为新名称。然后,在重写的版本中,用新名称调用旧方法。

def String
    alias to_i old_to_i
    def to_i
       #add your own functionality here
       old_to_i
    end
end

您可能还想看看alias_method_chain,它为您做了一些这方面的工作。

还有另一种有趣的方法可以让super工作——如果要打开的类支持它(例如,因为它是自己编写的):

类的方法不是直接在类主体中定义的,而是在随后包含的另一个模块中定义的。要覆盖重新打开的类的方法,请使用它的扩展版本(可能使用super)包含您自己的模块。

例如,这在irb替代ripl中用于让插件实现自己版本的核心方法(调用super以获得原始行为)。

相关内容

  • 没有找到相关文章

最新更新