模块(Modules)和混入(Mixins)

在 Ruby 中,每个类只有一个直接的“父类”(parent),尽管每个父类可能有许多“子类”(children)。通过将类层次结构限制为单继承,Ruby 避免了那些允许多继承的编程语言(如 C++)中可能出现的一些问题。当类有很多父类和子类,而且它们的父类、子类还有其它父类和子类,你最终会面临一个难以理解的网络(或者“结”?),而不是你可能想要的整洁,有序的层次结构。

然而,有时候(多继承)对于与实现某些共享特征并不密切相关的类是有用的。例如,剑可能是一种武器(Weapon),但也会是一种珍宝(Treasure);PC 可能是一种计算机(Computer),但也会是一种投资(Investment)等等。

但是,由于定义武器(Weapons)和珍宝(Treasures)或计算机(Computers)和投资(Investments)的类继承自不同的祖先类,因此它们的类层次结构使它们没有明显的方式来共享数据和方法。这个问题的 Ruby 解决方案由 Modules 提供。