ruby类中的超类是' Object'但对于' Class'是'模块

时间:2014-09-13 19:18:56

标签: ruby

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

Object class superclass explained

据我所知: Class 有一个实例方法定义 superclass ,可以被定义的任何新类调用(这里 MyClass )< / p>

我的问题是:

具有超类作为模块,但对象 MyClass 具有超类作为对象。为什么 Myclass 的超类是对象而不是模块?如果是设计,为什么这样设计呢?

1 个答案:

答案 0 :(得分: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不能被子类化。