[英]Ruby access derived class “class methods” from 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,而只需指定選項。
有任何想法嗎?
當你說它不起作用時,你並不具體。 我相信在定義Base類時會引發異常(而不是在調用my_option_value時)。
我建議您將方法名稱作為符號傳遞,並在SuperDuperClass中,調用send on self來調用派生方法。
class SuperDuperMethod
def self.some_code
self.class.__send__(options[:option])
end
...
只是為了關閉它,我的解決方案是在子類中調用super_duper_class_method
。 這是我試圖避免的,但在這種情況下,我認為如果沒有一些非常狂野的元編程,我就不可能得到我想要的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.