我找到了一个成功覆盖的源代码Time.strftime
:
class Time alias :old_strftime :strftime def strftime #do something old_strftime end end
麻烦的是,strftime
是一种实例方法.我需要覆盖Time.now
- 一个类方法 - 在任何调用者获取我的新方法的同时,新方法仍然调用原始.now
方法.我看了看alias_method
并没有成功.
这有点难以理解,但你需要打开"特征类",这是与特定类对象相关联的单例.这个语法是类<< 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