2017-02-03 37 views
0
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 => 「內源性」紅寶石self.inherited alias_method

但我希望

「內源性」

「內部繼承」

新的紅寶石。任何幫助將不勝感激。

回答

0

您已簡單覆蓋base.class_eval方法sam定義的Derived

如果您從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這是不可能的所有的降序課程,但後來只是壓倒一切。

+0

謝謝安德烈。方法old_sam不接受任何參數,並且現在相應地更改代碼。對不起。 – Raj

+0

@Raj我回答了你的問題,編輯它的方式不是一個好的選擇,它現在沒有意義,因爲它不會改變給出的答案。 –