Ruby ruby 中这些类的关系是怎么弄的?

1272729223 · 2012年08月21日 · 最后由 jjym 回复于 2012年08月21日 · 2470 次阅读

Class,Object,Kernel,Enumerable,Enumerator,BasicObject 哪个方法用于检测父类和子类?:ancestors? :kind_of? 我用这两个方法来检测上面的类,以及查看相对应的 ri,但是结果很乱。

首先检查该类所属的父类:

Class.ancestors            #=>Class,Module,Object,Kernel,BasicObject
Object.ancestors           #=>Object,Kernel,BasicObject
Kernel.ancestors           #=>[Kernel]
Enumerable.ancestors   #=>[Enumerable]
Enumerator.ancestors    #=>Enumerator,Enmuerable,Object,Kernel,BasicObject
BasicObject.ancestors   #=>[BasicObject]

这样子看起来,是不是可以确定他们的关系是这样的?

Class < Object < Kernel < BasicObject
Enumerator < (Enumerable和Object) < Kernel < BasicObject

那么为什么?

Class.kind_of? Object   #=>true
Object.kind_of? Class   #=> true  可能说所有的类都是Object类的子类,而所有的对象也都是特定类的实例。那么是不是可以不严谨的说凡是类也是对象,凡是对象都是类? 但是它是怎么处理Class和Object这两个类的父子关系的?就像上面方法检测的结果一样?

#同上:
Kernel.kind_of? Object  #=>true   #:ancestors方法检测Kernel的父类没有Object
Object.kind_of? Kernel  #=>true   
BasicObject.kind_of? Object   #=> true  #:ancestors方法检测BasicObject已经是最底层的类的。

新手问题,谢谢!

这个问题还是很复杂的。。请自行翻阅《Ruby 编程语言》和《Ruby 元编程》

需要 登录 后方可回复, 如果你还没有账号请 注册新账号