祖先链

作者: 葫芦葫芦快显灵 | 来源:发表于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,

相关文章

  • 祖先链

    概念 祖先链:通俗点就是找到一个类的祖宗(BaseObject)过程中的路径 组成 祖先链由类和其超类 以及mod...

  • 祖先,祖先

    (一) 最近两天出了件怪事:我在东区的巷子里发现了一栋老楼,这老楼上长了棵树,而这树又跟老楼一样高,甚至还...

  • Least Common Ancestor

    题目链接:最近公共祖先 树链剖分: Tarjan(离线)算法: 原创模板: RMQ-ST(在线)算法: 题目链接:...

  • javascript原型链

    javascript原型链:简单概念 简单讲解 这个prototype是定义构造函数构造出的每个对象的公共祖先 ...

  • 未来简史

    祖先的需求-我们祖先通过几万年的努力终于站在了食物链的顶端。从此开始了豢养家畜,大到猪牛马匹,小到鱼虾鸟虫。从此人...

  • ruby extend、include、prepend浅析

    include与extend 使用include的时候,将module A加入到class B的祖先链中,而在cl...

  • 【1003 晨读感悟】 沟通是一种双向的合作

    13万年前人类祖先从非洲大陆开始向地球的各个大陆开始迁徙,在那个远古的时代,人类祖先只能算是处于食物链中间的物种,...

  • 祖先

    祖先 一位满脸白癜风癍的货郎,摇着拨浪鼓向我们村走来。我们村庄周围的山林在初秋的阳光里闪闪发亮。没有尘土的树叶...

  • 祖先

    我的身体,连着山丘,连着大海,连着稻田,连着小河流; 连着童年的快乐,连着青春的烦恼,和成年的迷茫; 连着生活的喜...

  • 祖先?

    梦里面喝酒的地方换了第三个,从私房菜馆到路边摊最后又到酒吧。 最早的家庭聚会的目的已经忘了是什么了,反正就是人多和...

网友评论

      本文标题:祖先链

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