`
orcl_zhang
  • 浏览: 244584 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ruby cookbook -- 10.6. Listening for Changes to a Class监听类的变化

    博客分类:
  • ruby
阅读更多
当增加新方法,类方法删除和取消定义的现有方法
	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
	  end
	end

当模块混入一个类时
	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.
	 end
	end

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics