首页 > 解决方案 > 如何在运行时添加特定的类?

问题描述

是否可以prepend在运行时用于实例化类?例如,我需要根据传递的参数的值预先添加特定的类来初始化方法。

ex(如果允许在初始化中调用 prepend):

def initialize(param)
    prepend TestB if param == 2
    prepend TestC if param == 3
end

但当然,这会导致错误:

NoMethodError: undefined method `prepend' for .. etc

我将如何实现这一目标?我需要以一种干净的方式覆盖一些方法,同时实例化同一个类。

标签: ruby

解决方案


prepend是属于 的方法Module,因此不能在类的实例上调用它(这是您在initialize方法内部的位置)。如果您愿意,您可以使用extend(属于 的方法Object)将不同的方法实现混合到您的类的实例中。

就我个人而言,我认为这是一种控制对,而是尽量避免它。根据您的具体情况,工厂模式或适配器模式可能更合适。


推荐阅读