Ruby从基类访问派生类“类方法”

时间:2012-04-17 11:48:00

标签: ruby oop inheritance derived-class base-class

我在Ruby中有一个基类,它有一个继承的类方法。我想在基类中调用此方法,但是传递一个由派生类指定的选项,如下所示:

class Base < SuperDuperClass
  super_duper_class_method :option => my_option_value

  def self.my_option_value
    raise "Method my_option_value must be overridden by all subclasses"
  end
end

class Derived < Base
  def self.my_option_value
    "My Derived Option Value"
  end
end

但是,这不起作用。我相信这是因为基类中的顶级代码在派生类中的顶级代码之前执行,因此在调用super_duper_class_method时未定义派生方法。我宁愿不必在所有派生类中调用super_duper_class_method,而只是指定选项。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

当你说它不起作用时,你并不具体。我相信在定义Base类时会引发异常(而不是在调用my_option_value时)。

我建议您将方法名称作为符号传递,并在SuperDuperClass中调用send on self来调用派生方法。

class SuperDuperMethod
  def self.some_code
    self.class.__send__(options[:option])
  end
...

答案 1 :(得分:0)

为了关闭它,我的解决方案是在子类中调用super_duper_class_method。这就是我试图避免的,但在这种情况下,如果没有一些非常疯狂的元编程,我认为不可能得到我想要的东西。