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

前端之家收集整理的这篇文章主要介绍了ruby – 一个没有继承的 – 如何覆盖一个类方法并从新方法中调用原来的?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我找到一个成功地覆盖Time.strftime的源代码
  1. class Time
  2. alias :old_strftime :strftime
  3. def strftime
  4. #do something
  5. old_strftime
  6. end
  7. end

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

解决方法

这有时很难让你的头,但是你需要打开与特定类对象相关联的单例的“特征类”.其语法是class<<自己做...结束
  1. class Time
  2. alias :old_strftime :strftime
  3.  
  4. def strftime
  5. puts "got here"
  6. old_strftime
  7. end
  8. end
  9.  
  10. class Time
  11. class << self
  12. alias :old_now :now
  13. def now
  14. puts "got here too"
  15. old_now
  16. end
  17. end
  18. end
  19.  
  20. t = Time.now
  21. puts t.strftime

猜你在找的Ruby相关文章