Ruby 中的类是一等对象:每个都是类Class 的一个实例
所以你定义的每个类都会给你:
> MyClass.instance_of?(Class)
=> true
查看此页面上的继承关系图:http://ruby-doc.org/core-2.2.3/Class.html
类、模块和对象是相互关联的。在下图中,垂直箭头表示继承,括号表示元类。所有元类都是“Class”类的实例。
+---------+ +-...
| | |
BasicObject-----|-->(BasicObject)-------|-...
^ | ^ |
| | | |
Object---------|----->(Object)---------|-...
^ | ^ |
| | | |
+-------+ | +--------+ |
| | | | | |
| Module-|---------|--->(Module)-|-...
| ^ | | ^ |
| | | | | |
| Class-|---------|---->(Class)-|-...
| ^ | | ^ |
| +---+ | +----+
| |
obj--->OtherClass---------->(OtherClass)-----------...
这意味着:
> Class.ancestors
=> [Class, Module, Object, Kernel, BasicObject]
> Class.superclass
=> Module
> Module.superclass
=> Object
> Object.superclass
=> BasicObject
> BasicObject.superclass
=> nil
为了更深入地了解这一点,我强烈推荐 Dave Thomas 的截屏系列:
The Ruby Object Model and Metaprogramming