当前位置:  开发笔记 > 后端 > 正文

如何 - 没有继承 - 重写类方法并从新方法中调用原始方法?

如何解决《如何-没有继承-重写类方法并从新方法中调用原始方法?》经验,为你挑选了1个好方法。

我找到了一个成功覆盖的源代码Time.strftime:

class Time
  alias :old_strftime :strftime
  def strftime
    #do something
    old_strftime
  end
end

麻烦的是,strftime是一种实例方法.我需要覆盖Time.now- 一个类方法 - 在任何调用者获取我的新方法的同时,新方法仍然调用原始.now方法.我看了看alias_method并没有成功.



1> 小智..:

这有点难以理解,但你需要打开"特征类",这是与特定类对象相关联的单例.这个语法是类<< self do ... end.

class Time
  alias :old_strftime :strftime

  def strftime
    puts "got here"
    old_strftime
  end
end

class Time
  class << self
    alias :old_now :now
    def now
      puts "got here too"
      old_now
    end
  end
end

t = Time.now
puts t.strftime

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有