我在Ruby中有一个基类,它有一个它继承的类方法。我想调用基类的这个方法,但它传递这是由派生类中指定的选项,如下所示:基类中的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,而只是指定选项。
任何想法?
您也可以调用__send__而不是发送。 – 2012-04-17 12:39:06
我应该提到:SuperDuperClass来自一个库,所以最好是如果我不必猴子修补它来实现这个功能。当我在基类中使用'self.send'而不是直接调用方法时,我得到一个NoMethodError – alexsanford1 2012-04-17 13:39:22
这不是猴子修补。发送和调用方法一样。我的坏处是,因为你正在调用一个类方法,所以你需要发送这个类。我会编辑我的答案。 – 2012-04-17 17:35:39