如何在运行时在特定类的前面?

时间:2019-01-27 11:11:13

标签: ruby

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

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

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

但是,这当然会导致错误:

NoMethodError: undefined method `prepend' for .. etc

我将如何实现?在实例化同一类时,我需要以一种干净的方式重写某些方法。

1 个答案:

答案 0 :(得分:0)

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

我个人认为这是Control Couple的一种,宁可尝试避免使用。根据您的具体情况,工厂或适配器模式可能更合适。