模块方法

模块除了有实例方法(instance methods)之外,还可以具有模块方法(module methods)。就像类方法以类的名称为前缀一样,模块方法也以模块名称为前缀:

  1. def MyModule.greet
  2. return "I'm #{BADMOOD}. How are you?"
  3. end

尽管它们有相似之处,但是有两个重要特征,类有而模块没有:实例(instances)继承(inheritance)。类可以有实例(对象),超类(父类)和子类(子类);模块没有这些。

Module 类确实有一个超类 - 即 Object。 但是,你创建的任何命名模块都没有超类。有关模块(Modules)和类(Classes)之间关系的更详细说明,请参阅本章末尾的“深入探索”部分。

这为我们引出了下一个问题:如果你不能从模块创建一个对象,那么模块可以用来干什么?这可以用两个词来回答:命名空间(namespaces)混入(mixins)。Ruby 的 ‘mixins’ 机制提供了一种处理多重继承存在的问题的方法。我们很快就会遇到 mixins。首先,我们来看看命名空间(namespaces)。