我有一个有N种方法的类。
class MyClass
def self.method_one(params)
#specific code
end
def self.method_two(params)
#specific code
end
end
我需要为该类中创建的每个方法添加相同的代码。我需要将代码放在" 开始和救援"
之间我尝试了以下内容,但我没有成功:
class MyClass < BaseClass
add_rescue :method_one, :method_two, Exception do |message|
raise message
end
def self.method_one(params)
#specific code
end
def self.method_two(params)
#specific code
end
end
我创建了一个方法来改变方法
class BaseClass
def self.add_rescue(*meths, exception, &handler)
meths.each do |meth|
old = instance_method(meth)
define_method(meth) do |*args|
begin
old.bind(self).call(*args)
rescue exception => e
handler.call(e)
end
end
end
end
end
我总是收到错误消息: 未定义方法`method_one&#39; for Myclass:Class
答案 0 :(得分:3)
MyClass#method_one
是一个类方法,换句话说,是MyClass.singleton_class
的实例方法。也就是说,我们可以Module#prepend
MyClass.singleton_class
所需的功能:
def self.add_rescue(*meths, exception, &handler)
mod =
Module.new do
meths.each do |meth|
define_method meth do |*args, &λ|
begin
super(*args, &λ)
rescue exception => e
handler.(e)
end
end
end
end
MyClass.singleton_class.prepend(mod)
end