在Metaprogramming Ruby书中,我可以跨越超类和类的概念。 这是参考图像:
据我所知: Class 有一个实例方法定义 superclass ,可以被定义的任何新类调用(这里 MyClass )< / p>
我的问题是:
父类具有超类作为模块,但对象 MyClass 具有超类作为对象。为什么 Myclass 的超类是对象而不是模块?如果是设计,为什么这样设计呢?
答案 0 :(得分:2)
如果在Ruby中定义新类Foo
,那么它确实是Class
类的实例,而Foo.class.superclass
是Module
的预期。但既然你不是要问Foo.class
的祖先,而是直接询问Foo
的祖先,那就知道了
class Foo
end
与写作相同
class Foo < Object
end
换句话说,除非另有说明,否则新定义的类将默认成为Object
类的子类。当然,您可以手动定义
class Bar < Module
end
为了创建Module
类的显式子类。 Module
类的后代具有特定的特性,在Ruby中具有特殊用途。请注意,类Class
不能被子类化。