English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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
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.
#!/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:
#!/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.
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:
require filename
Aquí, la extensión del archivo .rb no es necesario.
$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.
Puedes incrustar módulos en la clase. Para incrustar módulos en la clase, puedes usar include sentencia:
include modulename
Si el módulo se define en un archivo separado, es necesario usar require sentencia que hace referencia a este archivo.
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:
#!/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
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:
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 .