Latest web development tutorials

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.
  • Así se puede ver que la clase hereda de muestra dos módulos, se puede decir que la Muestra de clase de uso de la herencia múltiple omixin.