以下是处理:我需要使用某些方法扩展具体类的实例。我需要包括模块内的生活方式,我希望Box实例能够包括动态模块。 我现在用一个钩子与一个eval:将模块中的方法动态添加到类的特定实例中
class Box
def after_initialize
if self.injected_module.present?
eval("class << self; include #{self.injected_module}; end")
end
end
end
这是合作得非常好,但我真的觉得脏当我使用EVAL。我正在寻找类似的东西:
module_to_inject = self.injected_module
self.eigenclass.class_eval do
include module_to_inject
end
但我不能没有的Monkeypatching类,如能够得到eigenclass上运行class_eval:
class Box; def eigenclass; class << self; self; end end end
有一个美丽的(和可靠)的方式来做到这一点?
非常感谢!它像一个魅力一样工作! – 2011-03-14 12:53:41