模块方法
模块除了有实例方法(instance methods)之外,还可以具有模块方法(module methods)。就像类方法以类的名称为前缀一样,模块方法也以模块名称为前缀:
def MyModule.greet
return "I'm #{BADMOOD}. How are you?"
end
尽管它们有相似之处,但是有两个重要特征,类有而模块没有:实例(instances)和继承(inheritance)。类可以有实例(对象),超类(父类)和子类(子类);模块没有这些。
Module 类确实有一个超类 - 即 Object。 但是,你创建的任何命名模块都没有超类。有关模块(Modules)和类(Classes)之间关系的更详细说明,请参阅本章末尾的“深入探索”部分。
这为我们引出了下一个问题:如果你不能从模块创建一个对象,那么模块可以用来干什么?这可以用两个词来回答:命名空间(namespaces)和混入(mixins)。Ruby 的 ‘mixins’ 机制提供了一种处理多重继承存在的问题的方法。我们很快就会遇到 mixins。首先,我们来看看命名空间(namespaces)。