祖先链

概念

祖先链:通俗点就是找到一个类的祖宗(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,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值