Like a class, a module is a named group of
methods, constants, and class variables. Modules are defined much like
classes are, but the
is used in place of the
keyword. Unlike a class, however, a module cannot be instantiated, and
it cannot be subclassed. Modules stand alone; there is no “module
hierarchy” of inheritance.
Modules are used as namespaces and as mixins. The subsections that follow explain these two uses.
Just as a class object is an instance of the
Class class, a module object is an instance of
Class is a subclass of
Module. This means that all classes are
modules, but not all modules are classes. Classes can be used as
namespaces, just as modules can. Classes cannot, however, be used as
Modules are a good way to group related methods when object-oriented programming is not necessary. Suppose, for example, you were writing methods to encode and decode binary data to and from text using the Base64 encoding. There is no need for special encoder and decoder objects, so there is no reason to define a class here. All we need are two methods: one to encode and one to decode. We could define just two global methods:
def base64_encode end def base64_decode end
To prevent namespace collisions with other encoding and decoding
methods, we’ve given our method names the
base64 prefix. This solution works, but most programmers prefer to avoid adding methods to the global namespace when possible. A better solution, ...