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 =&gt; “内在衍生”
但我希望
“内部衍生”
“内部继承”
红宝石新手。任何帮助将不胜感激。
答案 0 :(得分:0)
您只需覆盖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"
但我希望
&#34;内部衍生&#34;
&#34;内部继承&#34;
这对您的设置是不可能的,因为您要做的是首先在sam
块中为所有降序类定义实例方法class_eval
,但稍后只是覆盖。