Modules

A module is a collection of classes and methods, stored in a file and defining a namespace. A module is an instance of the Module class, the "Module" class is inherited by the class: "Class", whose instances are the class definitions.

A module in a file named "nomefile.rb" can be included in a Ruby program and executed with the "load" or the "require" statements.

To use a method or a constant defined into a module the method or the constant name must be prefixed with the module name as: "Math::sin(90.0) ; Math::PI" "::" being the "resolution" operator.

Modules can be nested.

A module is defined by the keyword "module" ; the name of a module has the first letter capitalized; the name is a constant associated with the module

module Nomemodulo       # module definition

  class ...       # definition of a class in the module

  end

  def ...          # definition of a function in the module

  end


end

Modules can be included into a class (mixins); if variables are defined into the module, module accessor functions have to be defined in the module to use the variables as attributes of instances of the class including the module.

The statement "include" mixes a module into the namespace of a class, if the module is in its own file, and not in the same file of the class, the file containing the module must be loaded with "load" or "require" before the inclusion in the class:

module Mod            # a simple module

  def func            # with a simple method
    "A function of Mod!"
  end
end

class Classe
    include Mod       # mixed into a class
end

b=Classe.new                         # an instance

b.respond_to? :func    => true       # responds to the module method
b.respond_to? "func"   => true

b.func                 # => "A function of Mod!"

The extend method can insert a module into an instance, and the methods of the module become singleton methods of the instance:

module Mod
  def func
    "A function of Mod!"
  end
end

a = []
a.extend(Mod)
a.func               # => "A function of Mod!"
a.singleton_methods  # => ["func"]

When, for an object, the freeze method is called, the object can't be extended with a module.