módulo de Rubí (módulo)
Module (Módulo) es una forma de métodos, clases, y las constantes de combinar manera. Module (Módulo) le ofrece dos ventajas.
- Los módulos proporcionan unespaciodenombresy evitar conflictos de nombres.
- Módulo implementa dispositivosmixin.
Module (Módulo) define un espacio de nombres, el equivalente a una caja de arena, sus métodos y constantes no son constantes y métodos de conflicto en otra parte.
Módulo de clase similar, pero con una mirada diferente:
- Los módulos no se pueden crear instancias
- No. del módulo subclases
- Módulo sólo puede definirse por otro módulo
gramática
module Identifier statement1 statement2 ........... end
Módulo constantes con nombre y constantes de clases de manera similar nombrados, comenzando con una letra mayúscula. definición del método se ve como: enfoque modular similar a definir las definiciones de métodos de clase.
A través de los métodos de la clase, se puede colocar el nombre del módulo y un punto delante del nombre de la clase del método a llamar el enfoque modular, se puede utilizar el nombre del módulo y dos colones para hacer referencia a una constante.
Ejemplos
#!/usr/bin/ruby # 定义在 trig.rb 文件中的模块 module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end
Podemos definir varias funciones con el mismo nombre pero diferentes módulos funcionales:
#!/usr/bin/ruby # 定义在 moral.rb 文件中的模块 module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # ... end end
Al igual que los métodos de clase, cuando se define un método en un módulo, puede especificar el nombre del módulo seguido de un punto después del punto seguido por el nombre del método.
Rubírequiere declaración
requiere declaración es similar a C y C ++, e incluyen declaraciones en la declaración de importación de Java. Si un programa de terceros que desea utilizar cualquiera de los módulos se han definido, puede simplemente usar elRubírequiere declaración a cargar el archivo de módulo:
gramática
require filename
Aquí, no.RB requiere la extensión de archivo.
Ejemplos
$ LOAD_PATH << ''. require 'trig.rb' requerir "moral" y = Trig.sin (Trig :: PI / 4) irregularidades = Moral.sin (Moral :: VERY_BAD)
Aquí, utilizamos$ LOAD_PATH << '. "Que Rubí sabe que hay que buscar el archivo que se hace referencia en el directorio actual.Si no desea utilizar $ LOAD_PATH, puede utilizarrequire_relative para hacer referencia a un archivo de un directorio relativo.
Nota: En este caso, el archivo contiene el mismo nombre de la función.Por lo tanto, esto dará lugar a confusión cuando se refiere al programa de llamada pero los módulos evitar esta ofuscación de código, y podemos usar el nombre del módulo para llamar a la función apropiada.
Rubíinclude
Puede incrustar un módulo en una clase. Con el fin de integrar en el módulo de clase, puede utilizarincluirdeclaraciones de su clase:
gramática
include modulename
Si el módulo se define en un archivo separado, por lo que antes de tener que utilizar el módulo incorporadoRequierenReferencia declaraciones el archivo.
Ejemplos
Suponiendo que los siguientes módulos escritos en el archivosupport.rb.
module Week FIRST_DAY = "Sunday" def Week.weeks_in_month puts "You have four weeks in a month" end def Week.weeks_in_year puts "You have 52 weeks in a year" end end
Ahora puede hacer referencia al módulo en la clase, de la siguiente manera:
#!/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 produce los siguientes resultados:
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
Rubí en Mixins
Antes de leer esta sección, se necesita un entendimiento preliminar de los conceptos orientados a objetos.
Cuando una clase puede haber más de una clase padre cuando la clase de entidad hereda de la clase se muestra como la herencia múltiple.
Ruby no apoyar directamente a la herencia múltiple, pero el módulo de Ruby (módulo) tiene otras características fantásticas. Es prácticamente elimina la necesidad de que la herencia múltiple, se proporciona un aparato llamadoun mixin.
Ruby no tiene realmente lograr múltiples mecanismo de herencia, pero adoptó como la tecnología mixin como sustituto. Los módulos incluyen la definición de clase, el enfoque módulo a mezclar en la clase.
Veamos el siguiente código de ejemplo, la comprensión en profundidad de 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
- Un módulo está compuesto por el proceso de a1 y a2.
- Módulo B por el método de la composición b1 y b2.
- clase de muestra contiene los módulos A y B.
- clase de muestra puede tener acceso a los cuatro métodos, a saber, a1, a2, b1 y b2.