Class' s超类和String的超类

时间:2014-04-09 21:55:09

标签: ruby superclass

Class有超类Module,但任何类(如String)都有超类Object。为什么?

2 个答案:

答案 0 :(得分:0)

为清楚起见,您需要查看Ruby的Object model

模块对象是相互关联的。在下图中,垂直箭头表示继承,括号元类。所有元类都是类Class的实例。

                         +---------+             +-...
                         |         |             |
         BasicObject-----|-->(BasicObject)-------|-...
             ^           |         ^             |
             |           |         |             |
          Object---------|----->(Object)---------|-...
             ^           |         ^             |
             |           |         |             |
             +-------+   |         +--------+    |
             |       |   |         |        |    |
             |    Module-|---------|--->(Module)-|-...
             |       ^   |         |        ^    |
             |       |   |         |        |    |
             |     Class-|---------|---->(Class)-|-...
             |       ^   |         |        ^    |
             |       +---+         |        +----+
             |                     |
obj--->OtherClass---------->(OtherClass)-----------...

通过查看上图,您可以回答所有问题。

  

但任何类,如" String",你得到超类"对象"。为什么?

查看图中的OtherClassHashStringArray等都是OtherClass

  

在Ruby中," Class"本身有超类"模块"

这是如何设计的,再次可以从图表中回答。

答案 1 :(得分:0)

在ruby中,一切都是对象,包括类,而类本身也是对象。 String对象有自己的类ClassString本身也是一个类,String的超类是' Object'。

同时,Class本身也是一个对象,但是超类是Module,它是由Ruby语言设计的。