我有以下一段代码。它实际上是三个独立的脚本,除了我将它们组合在一起。Main
类是两个Test
类继承的东西。他们可能会定义一种out
方法,该方法可以满足开发人员的要求。这是一种插件式的设计,这样人们就可以out
在自己的类中定义自己的方法,然后当我的主程序选择其中一个自定义类时,我可以说
some_test.run
如果他们决定实现一个out
将被执行的方法。
有没有更好的方法来实现该run
方法,以便我不需要显式编写self.class.method_defined?
?该对象可以是任何Test
对象,我不希望他们必须覆盖该run
方法以将自己的类名放在method_defined?
调用前面。
class Main
def run
send(:out) if self.class.method_defined?(:out)
end
end
class TestA < Main
def out
p "Test A here"
end
end
class TestB < Main
def out
p "Test B here"
end
end
a = TestA.new
a.run
# will execute a's out method
b = TestB.new
b.run
# will execute b's out method