祖先链

作者: 葫芦葫芦快显灵 | 来源:发表于2019-10-28 15:56 被阅读0次

    概念

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

    祖先链.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,

    相关文章

      网友评论

          本文标题:祖先链

          本文链接:https://www.haomeiwen.com/subject/dijbvctx.html