祖先链

概念

祖先链:通俗点就是找到一个类的祖宗(BaseObject)过程中的路径

祖先链_第1张图片
祖先链.png

组成

祖先链由类和其超类 以及module 组成

每一个对象(obj)都属于一个类(class), class的超类是Object, Object的超类是BasicObject, 在这个过程中可能还引入了module, module 也是祖先链中的一环。
当一个类(模块)包含一个模块,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, 两者的区别在与 include: 引入的模块会在祖先链其包含它的该类的上方; prepend 引入的模块会在其祖先链包含它的该类的下方

注意:

多重引入
当某个module 已经在祖先链中时,ruby 会忽略其他对该类的引用,即某个module 只会在祖先链中出现一次。
内核模块kernel:
Object 包含了kernel 模块,故而每一个类的祖先链中都包含有kernel,

你可能感兴趣的:(祖先链)