Rubyに継承したクラスメソッドを持つ基本クラスがあります。私は、基本クラスでこのメソッドを呼び出しますが、派生クラスで指定されたオプションを渡し、そのようにしたいと思います:Rubyアクセス派生クラス "class methods"(基底クラス)
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の代わりに__send__を呼び出すこともできます。 –
私は言及すべきである:SuperDuperClassはライブラリからのものなので、これを動作させるためにサルパッチをする必要がないなら、最高のものになるだろう。メソッドを直接呼び出すのではなく、 'self.send'を基本クラスで使用すると、NoMethodErrorを取得します。 – alexsanford1
サルのパッチ適用ではありません。 Sendメソッドを呼び出すのと同じことを行います。私の悪い点は、あなたがクラスメソッドを呼び出すので、クラスを送信する必要があるということでした。私は私の答えを編集します。 –