2014-09-13 21 views
1

在Metaprogramming Ruby书中,我可以跨越超类和类的概念。 这里是参考图像:Ruby类中的超类是'Object',但'Class'是'Module

Object class superclass explained

据我所知:类具有限定一个实例方法,它可以由下式定义(此处MyClass的

任何新的类被称为

我的问题是:

父母有超类为模块但对象MyClass的超类为对象。为什么超类的Myclass对象但不是模块?如果是通过设计,为什么这样设计?

回答

2

如果您在Ruby中定义一个新类Foo,那么的确,这是Class类的一个实例,并Foo.class.superclassModule预期。但既然你问不是的Foo.class祖先,而是直接有关的Foo祖先,后来才知道,

class Foo 
end 

是一样的书写

class Foo < Object 
end 

换句话说,新定义的类将默认成为Object类的子类,除非另有说明。当然,您可以手动定义

class Bar < Module 
end 

为了创建Module类的显式子类。 Module类的后裔具有特定的特性,并且在Ruby中特别有用。请注意,类Class不能被分类。

相关问题