ruby self.inherited alias_method
class Base
def sam
"I m the base"
end
def self.inherited(base)
alias_method :old_sam, :sam
base.class_eval do
def sam
old_sam
p "Inside inherited"
end
end
super
end
end
class Derived < Base
def sam
p "Inside Derived"
end
end
когда Derived.new.sam => "Внутри производных"
Но я ожидаю
"Внутри производных"
"Внутри по наследству"
Новое в рубине. Любая помощь будет оценена.
1 ответ
Вы просто переопределили base.class_eval
метод sam
в Derived
,
Если вы удалите метод sam
от Derived
:
class Derived < Base
end
Ты получишь:
#=> "Inside inherited"
#=> ArgumentError: wrong number of arguments (given 1, expected 0)
Последнее потому, что вы передаете аргумент old_sam
метод, который не принимает его:
old_sam p "Inside inherited"
Но я ожидаю
"Внутри производных"
"Внутри по наследству"
Это невозможно с вашей настройкой, потому что вы сначала определяете метод экземпляра sam
в class_eval
блок для всех нисходящих классов, но позже просто переопределяет в.