我有這個元編程方案,觸及Ruby的一些更好的功能,我不太清楚如何解決。如何在Ruby中的子類中動態定義的方法調用super?
每個人都可以輕鬆編程下面的例子來完成它應該做的事情,但我需要在超類和派生子類中動態地定義方法。
在這個例子中,基類有一個動態定義的方法:foo和cource它暴露給子類B.但是,當我在子類B的一個實例上調用:foo時,我在動態定義的方法中檢測,我似乎無法從B類實例傳遞給A類實例,而Cource類是我想要的。
奇怪的紅寶石分類定義的子類的方法也是這樣,但無論如何,這就是我正在嘗試解決的問題。
任何線索?
class A
def self.some_method method,*_params
puts "#{name}: defining #{method}"
define_method method do |*args|
puts "#{self.class.name}: called #{method}"
super *args unless self.class.instance_methods(false).include?(method)
end
end
end
class B < A
end
A.some_method :foo
B.new.foo
輸出
A: defining foo
B: called foo
NoMethodError: super: no superclass method `foo' for #<B:0x007f9eab85bfa0>
BTW:我試圖避免的method_missing。 – patrick