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

それが機能していないと言ったとき、あなたは具体的ではありませんでした。(my_option_valueが呼​​び出されたときではなく)Baseクラスが定義されたときに、例外が発生すると思います。

メソッド名をシンボルとして渡し、SuperDuperClassで、sendonselfを呼び出して派生メソッドを呼び出すことをお勧めします。

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 に答える