[英]Ruby, inheritance, self.inherited and instance_methods()
[英]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 =>“ Inside Derived”
但是我希望
“內部派生”
“內部繼承”
紅寶石的新手。 任何幫助將不勝感激。
您只需覆蓋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
方法,而沒有采用該參數:
old_sam p "Inside inherited"
但是我希望
“內部派生”
“內部繼承”
在您的設置中這是不可能的,因為您要做的是首先在class_eval
塊中為所有降級類定義一個實例方法sam
,但隨后將其覆蓋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.