English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Módulo Ruby (Module)

El módulo (Module) es una manera de combinar métodos, clases y constantes. El módulo (Module) le ofrece dos grandes beneficios.

  • El módulo proporciona unaespacio de nombresy evita conflictos de nombres.

  • El módulo implementa mixin dispositivo.

El módulo (Module) define un espacio de nombres, equivalente a una caja de arena, en la que sus métodos y constantes no conflictuarán con otros métodos y constantes en otros lugares.

El módulo es similar a la clase, pero tiene las siguientes diferencias:

  • El módulo no puede ser instanciado

  • El módulo no tiene subclases

  • El módulo solo puede ser definido por otro módulo

sintaxis

module Identifier
   statement1
   statement2
   ...........
end

El nombre de las constantes del módulo es similar al de las constantes de la clase, comienza con mayúsculas. La definición de métodos también se ve similar: la definición de métodos del módulo es similar a la definición de métodos de la clase.

A través de métodos de clase, puede colocar el nombre del módulo y un punto antes del nombre del método de clase para llamar al método del módulo, y puede usar el nombre del módulo y dos dos puntos para referirse a una constante.

Ejemplo en línea

#!/usr/bin/ruby
 
# Módulo definido en el archivo trig.rb
 
module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end

Podemos definir múltiples módulos con nombres de función idénticos pero funcionalidades diferentes:

Ejemplo en línea

#!/usr/bin/ruby
 
# Módulo definido en el archivo moral.rb
 
module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   end
end

como métodos de clase, cuando define un método en un módulo, puede especificar un punto después del nombre del módulo, seguido del nombre del método.

Ruby require sentencia

la declaración require es similar a C y C++ las declaraciones include en Ruby y las declaraciones import en Java. Si un programa de terceros desea usar cualquier módulo definido, puede usar simplemente Ruby require la declaración para cargar archivos de módulo:

sintaxis

sintaxis

require filename

Aquí, la extensión del archivo .rb no es necesario.

Ejemplo en línea

$LOAD_PATH << '.'
 
require 'trig.rb'
require 'moral'
 
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)

Aquí, usamos $LOAD_PATH << '.' Haga que Ruby sepa que debe buscar los archivos citados en el directorio actual. Si no desea usar $LOAD_PATH, puede usar require_relative para referirse a archivos desde un directorio relativo.

Nota:Aquí, el archivo contiene nombres de funciones idénticos. Por lo tanto, esto causará confusión en la llamada a programas de referencia, pero los módulos evitan esta confusión y podemos llamar a las funciones adecuadas utilizando el nombre del módulo.

Ruby include sentencia

Puedes incrustar módulos en la clase. Para incrustar módulos en la clase, puedes usar include sentencia:

sintaxis

include modulename

Si el módulo se define en un archivo separado, es necesario usar require sentencia que hace referencia a este archivo.

Ejemplo en línea

Supongamos que el módulo siguiente se escribe support.rb en el archivo.

module Week
   FIRST_DAY = "Domingo"
   def Week.weeks_in_month
      puts "Tienes cuatro semanas en un mes"
   end
   def Week.weeks_in_year
      puts "Tienes 52 semanas en un año"
   end
end

Ahora, puedes referirte a este módulo en la clase, como se muestra a continuación:

Ejemplo en línea

#!/usr/bin/ruby
$LOAD_PATH << '.'
require "support"
 
class Decade
include Week
   no_of_yrs=10
   def no_of_months
      puts Week::FIRST_DAY
      number=10*12
      puts number
   end
end
d1=Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months

Esto producirá el siguiente resultado:

Domingo
Tienes cuatro semanas en un mes
Tienes 52 semanas en un año
Domingo
120

Mixins en Ruby

Antes de leer esta sección, necesita tener una comprensión inicial del concepto de orientación a objetos.

Cuando una clase puede heredar características de múltiples clases padre, la clase se muestra como herencia múltiple.

Ruby no admite directamente la herencia múltiple, pero el módulo (Module) de Ruby tiene otra función mágica. Casi elimina la necesidad de la herencia múltiple, proporcionando una función llamada mixin del dispositivo.

Ruby no tiene realmente un mecanismo de herencia múltiple, sino que utiliza la técnica de mixin como sustituto. Incluir un módulo en la definición de clase, los métodos del módulo se mezclan en la clase.

Veamos el siguiente código de ejemplo para entender mejor el mixin:

Ejemplo en línea

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end
 
class Sample
include A
include B
   def s1
   end
end
 
samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1
  • El módulo A consta del método a1 y a2 composición.

  • El módulo B consta del método b1 y b2 composición.

  • La clase Sample contiene los módulos A y B.

  • La clase Sample puede acceder a todos los cuatro métodos, es decir, a1、a2、b1 y b2.

Por lo tanto, puede ver que la clase Sample hereda dos módulos, puede decir que la clase Sample utiliza la herencia múltiple o mixin .