断言类
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
网友评论