簡體   English   中英

紅寶石self.inherited別名_method

[英]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”

但是我希望

“內部派生”

“內部繼承”

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

您只需覆蓋Derivedbase.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM