ruby断言小花招


断言类

class Object
  # 需用eigenclass
  def metaclass
    class << self
      self
    end
  end

  # 实例方法断言
  def skip_method(*args,&block)
    actual_asset_return(args,&block)
  end

  # 类方法断言
  def class_skip_method(*args,&block)
    self.metaclass.send(:actual_asset_return,args,&block)
  end


  private
  # 别名
  def actual_asset_return(method_names)
    method_names.each do |method_name|
      new_method_name = "_#{method_name}_asset_rtn_m".to_sym
      alias_method new_method_name, method_name.to_sym
      define_method method_name do |*args|
        puts "asset"
        yield if block_given?
      end
    end
  end
end

正式上忽略断言

class Object
  def skip_method(*args);end;
  def class_skip_method(*args);end;
end

跳过方法执行

class A
  def sb
    puts "sb"
  end
  skip_method :sb do 
    11
  end

  def self.sba
    puts "m_sb"
  end
  class_skip_method :sba
end
A.new.sb # 不执行原方法 返回11

A.sba # 不执行原方法,返回nil