ruby静态方法hook

阅读更多

 静态方法和实例方法的实现方式不一样,代码如下:

 

class M
  class << self
    def save(tt,a)
      #puts "save #{tt} #{t3}"
      puts "save #{tt} #{a}"
    end
    # def reload(flag)
      # puts "reloaded"
    # end
    
    def __create_rule_before( method, comment = '', &block)
    return if method.to_s=='__create_rule_before' 
      puts "method= #{method} #{method.class}"
      args = M.method(method).arity == 0 ? '' : '(*args)'
      puts "args= #{args}"
      b_id = "%04x" % block.object_id
      old_method_name = :"__previous_#{method}_#{b_id}"
      #alias_method old_method_name, method
      
      puts "method= #{old_method_name} #{old_method_name.class}"
      define_singleton_method :"__before_#{method}_#{b_id}", &block
      # class_eval <<-EOT
        # class < 

你可能感兴趣的:(ruby静态方法hook)