簡體   English   中英

Ruby從基類訪問派生類“類方法”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM