祖先鏈

概念

祖先鏈:通俗點就是找到一個類的祖宗(BaseObject)過程中的路徑

祖先鏈.png

組成

祖先鏈由類和其超類 以及module 組成

每一個對象(obj)都屬于一個類(class), class的超類是Object, Object的超類是BasicObject, 在這個過程中可能還引入了module, module 也是祖先鏈中的一環(huán)。
當一個類(模塊)包含一個模塊,ruby 就會把這個模塊加入祖先鏈中,其位置在包含這個模塊的類之上。

module M1
    def my_method
          #do something
    end
end

class C
    include M1
end

class D < C; end
D.ancestors              #=> [D, C, M1, Object, Kernel, BasicObject]

從ruby2.0開始,引入模塊的方式有兩種,include 和 prepend, 兩者的區(qū)別在與 include: 引入的模塊會在祖先鏈其包含它的該類的上方; prepend 引入的模塊會在其祖先鏈包含它的該類的下方

注意:

多重引入
當某個module 已經(jīng)在祖先鏈中時,ruby 會忽略其他對該類的引用,即某個module 只會在祖先鏈中出現(xiàn)一次。
內(nèi)核模塊kernel:
Object 包含了kernel 模塊,故而每一個類的祖先鏈中都包含有kernel,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容