05 - listening for changes to a class.rb
来自「O Reilly Ruby Cookbook source code」· RB 代码 · 共 78 行
RB
78 行
class Tracker def important "This is an important method!" end def self.method_added sym if sym == :important raise 'The "important" method has been redefined!' else puts %{Method "#{sym}" was (re)defined.} end end def self.method_removed sym if sym == :important raise 'The "important" method has been removed!' else puts %{Method "#{sym}" was removed.} end end def self.method_undefined sym if sym == :important raise 'The "important" method has been undefined!' else puts %{Method "#{sym}" was removed.} end endend#---class Tracker def new_method 'This is a new method.' endend# Method "new_method" was (re)defined.#---class Tracker undef :importantend# RuntimeError: The "important" method has been undefined!#---class Tracker include Enumerableend# Nothing!#---class Module alias_method :include_no_hook, :include def include(*modules) # Run the old implementation. include_no_hook(*modules) # Then run the hook. modules.each do |mod| self.include_hook mod end end def include_hook # Do nothing by default, just like Module#method_added et al. # This method must be overridden in a subclass to do something useful. endend#---class Tracker def self.include_hook mod puts %{"#{mod}" was included in #{self}.} endendclass Tracker include Enumerableend# "Enumerable" was included in Tracker.#---
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?