【发布时间】:2020-06-26 08:30:26
【问题描述】:
是否可以在 Ruby 中动态覆盖类方法?
我有一个ErrorHandler 模块,它应该动态地创建一个具有给定名称的类方法,并执行与它覆盖的方法相同的操作:
module ErrorHandler
def self.handle_error_from(method_name)
define_singleton_method(method_name) do |*arguments|
begin
super(*arguments)
rescue
return "Handler return"
end
end
end
end
上面的模块是prepended到另一个模块。
module AnotherModule
prepend ErrorHandler
ErrorHandler.handle_error_from :create
def self.create(params)
# Code here
end
end
上面的例子触发了ErrorHandler,但是并没有用创建的方法覆盖它。
我已经看到这是用实例方法完成的,但是当它是类方法时有限制吗?
【问题讨论】:
标签: ruby inheritance prepend