概念
祖先鏈:通俗點就是找到一個類的祖宗(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,