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 =>“内部派生”时
但我希望
“内部派生”
“内部继承”
ruby新手。任何帮助都将不胜感激。
发布于 2017-02-03 19:02:37
您只需覆盖Derived中由base.class_eval方法sam定义的。
如果从Derived中删除方法sam
class Derived < Base
end您将获得:
#=> "Inside inherited"
#=> ArgumentError: wrong number of arguments (given 1, expected 0)后者是因为您向old_sam方法传递了一个参数,而该方法不接受该参数:
old_sam p "Inside inherited",但我希望
“内部派生”
“内部继承”
对于您的设置来说,这是不可能的,因为您要做的是首先在class_eval块中为所有下行类定义一个实例方法sam,然后在中覆盖它。
https://stackoverflow.com/questions/42022520
复制相似问题