Class
有超类Module
,但任何类(如String
)都有超类Object
。为什么?
答案 0 :(得分:0)
为清楚起见,您需要查看Ruby的Object model:
类,模块和对象是相互关联的。在下图中,垂直箭头表示继承,括号元类。所有元类都是类Class
的实例。
+---------+ +-...
| | |
BasicObject-----|-->(BasicObject)-------|-...
^ | ^ |
| | | |
Object---------|----->(Object)---------|-...
^ | ^ |
| | | |
+-------+ | +--------+ |
| | | | | |
| Module-|---------|--->(Module)-|-...
| ^ | | ^ |
| | | | | |
| Class-|---------|---->(Class)-|-...
| ^ | | ^ |
| +---+ | +----+
| |
obj--->OtherClass---------->(OtherClass)-----------...
通过查看上图,您可以回答所有问题。
但任何类,如" String",你得到超类"对象"。为什么?
查看图中的OtherClass
。 Hash
,String
,Array
等都是OtherClass
。
在Ruby中," Class"本身有超类"模块"
这是如何设计的,再次可以从图表中回答。
答案 1 :(得分:0)
在ruby中,一切都是对象,包括类,而类本身也是对象。
String
对象有自己的类Class
。
String
本身也是一个类,String的超类是' Object'。
同时,Class
本身也是一个对象,但是超类是Module
,它是由Ruby语言设计的。