То, что я хочу достичь, это то, как показано ниже, то есть вызов метода базового класса из расширенного метода модулей:странный вывод на вызов метода базового класса из расширенного модуля
class BaseClass
def behavior
puts 'base class behavior'
end
end
module ChildModule
def behavior
super.behavior
puts 'child module behavior'
end
end
o = BaseClass.new
o.extend ChildModule
o.behavior
и выводит следующий образом (с рубином 1.9 .2p290 (2011-07-09 редакция 32553) [x86_64-линукс])
base class behavior
t.rb:9:in `behavior': undefined method `behavior' for nil:NilClass (NoMethodError)
from t.rb:16:in `<main>'
Я думаю, что я не могу использовать super
, поскольку super
не существует в модуле. Но он печатает эту строку из метода super
, это странно?
Как достичь этого, что я хочу выше?
Ответа на этот вопрос @davidrac, быв быть более любопытным, хотел бы знать, как я могу получить дескриптор экземпляра базового класса? Скажем, например, я добавил следующий метод в BaseClass
def behavior2
puts 'base class behavior2'
end
и переопределяет его в ChildModule. Теперь из поведения ChildModule я могу позвонить на поведение2 BaseModule?
Возможный дубликат .. http://stackoverflow.com/questions/1547074/calling-base-class-method-from-overloaded-method-in-sub -класс –