Módulos
Los módulos en Ruby cumplen una doble función: evitan colisiones de nombres y nos ayudan a reutilizar código.
Un módulo es un contenedor de clases, métodos y constantes. Los módulos se definen utilizando la palabra clave module.
Creemos un módulo MyModule:
1
module MyModule
2
end
Copied!
Dentro del módulo podemos definir clases, métodos y constantes. Por ejemplo:
1
module MyModule
2
MAX_CONNECTIONS = 5
3
4
def method_one
5
end
6
7
def method_two
8
end
9
10
class ThingOne
11
end
12
13
class ThingTwo
14
end
15
end
Copied!
Para acceder a las clases y constantes escribes el nombre del módulo, seguido de :: (doble dos puntos), seguido del nombre de la clase o la constante. Por ejemplo:
1
puts MyModule::MAX_CONNECTIONS # Imprime 5
2
3
MyModule::ThingOne.new # Crea una instancia de la clase
Copied!
A los métodos que están definidos en un módulo no los podemos acceder directamente, tenemos que mezclar el módulo dentro de una clase.

Mezclando el módulo

Los módulos se pueden incluir dentro de una clase utilizando la palabra clave include:
1
class Person
2
include MyModule
3
end
Copied!
Esto va a incluir todos los métodos de MyModule dentro de Person, así que podemos llamar los métodos method_one y method_two (que definimos dentro del módulo MyModule en la sección anterior) sobre instancias de Person.
Otra ventaja de incluir (o mezclar) un módulo dentro de una clase es que podemos acceder a las clases y las constantes que están definidas dentro del módulo directamente:
1
class Person
2
include MyModule
3
4
def initialize
5
puts MAX_CONNECTIONS # no hay necesidad de agregar el prefijo MyModule::
6
ThingOne.new # no hay necesidad de agregar el prefijo MyModule::
7
end
8
end
Copied!
Es posible mezclar más de un módulo en una clase. Por ejemplo, suponiendo que existen los módulos Module1 y Module2, podemos hacer lo siguiente:
1
class Person
2
include Module1
3
include Module2
4
end
Copied!

Anidando módulos

Es posible anidar módulos dentro de módulos. Por ejemplo:
1
module System
2
module Currency
3
class Dollar
4
end
5
end
6
end
Copied!
¿Cómo accedemos a la clase Dollar? De la siguiente forma:
1
System::Currency::Dollar.new
Copied!
Last modified 3yr ago