ruby – 一个没有继承的 – 如何覆盖一个类方法并从新方法中调用原来的?

我找到一个成功地覆盖Time.strftime的源代码
class Time
  alias :old_strftime :strftime
  def strftime
    #do something
    old_strftime
  end
end

麻烦的是,strftime是一个实例方法.我需要重写Time.Now一个类的方法 – 这样就可以让任何调用获取我的新方法,而新的方法仍然调用原来的.Now方法.我看过alias_method,没有成功.

解决方法

这有时很难让你的头,但是你需要打开与特定类对象相关联的单例的“特征类”.其语法是class<<自己做...结束
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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...