所有的类最终继承于Object,Object本身又继承于 BasicObject。BasicObject是ruby对象体系中的根节点。
'hello'.class
=> String
String.class
=> Class
String.superclass
=> Object
Object.superclass
=> BasicObject
BasicObject.superclass
=> nil
Class.superclass
=> Module
Module.superclass
=> Object
因此,一个类只不过是一个增强的Module,增加了几个方法(new(),allocate(),superclass()等等),其中allocate()方法是new()方法的支撑方法。这几个方法可以创建对象并且可以把它们纳入到类体系结构中。
一个模块基本上就是一组实例方法,而类是增加了若干新功能(一个superclass()方法和一个new()方法)的模块。
模块和类的使用场景:
模块:希望它应该在别处被包含(include)时,或者当成命名空间时。
类:当希望被实例化或者继承时。