3

我在 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,而只需指定选项即可。

有任何想法吗?

4

2 回答 2

0

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

建议你把方法名作为符号传递,在SuperDuperClass中调用send on self调用派生方法。

class SuperDuperMethod
  def self.some_code
    self.class.__send__(options[:option])
  end
...
于 2012-04-17T12:35:20.983 回答
0

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

于 2012-11-26T18:42:48.720 回答