Para crear componentes reutilizables, que se puedan usar fácilmente en otros programas, un lenguaje de programación debe tener alguna forma de importar sin problemas ese código en tiempo de ejecución. En Ruby, el exigir El método se utiliza para cargar otro archivo y ejecutar todas sus declaraciones. Esto sirve para importar todas las definiciones de clase y método en el archivo. Además de simplemente ejecutar todas las declaraciones en el archivo, el método require también realiza un seguimiento de qué archivos se han requerido previamente y, por lo tanto, no requerirá un archivo dos veces.
El método require toma el nombre del archivo para requerir, como una cadena, como un solo argumento. Esto puede ser una ruta al archivo, como ./lib/some_library.rb o un nombre abreviado, como alguna_library. Si el argumento es una ruta y un nombre de archivo completo, el método require buscará allí el archivo. Sin embargo, si el argumento es un nombre abreviado, el método require buscará en un número de directorios predefinidos en su sistema ese archivo. Usar el nombre abreviado es la forma más común de usar el método require.
El siguiente ejemplo muestra cómo usar la instrucción require. El archivo test_library.rb está en el primer bloque de código. Este archivo imprime un mensaje y define una nueva clase. El segundo bloque de código es el archivo test_program.rb. Este archivo carga el test_library.rb archivo usando elexigirmétodo y crea un nuevo TestClass objeto.
pone "test_library incluido"
clase TestClass
def inicializar
pone "objeto TestClass creado"
final
final
#! / usr / bin / env ruby
requiere 'test_library.rb'
t = TestClass.new
Al escribir componentes reutilizables, es mejor no declarar muchas variables en el ámbito global fuera de cualquier clase o método o mediante el uso de PS prefijo. Esto es para evitar algo llamado "contaminación del espacio de nombres". Si declara demasiados nombres, otro programa o biblioteca podría declarar el mismo nombre y provocar un choque de nombres. Cuando dos bibliotecas completamente no relacionadas comienzan a cambiar las variables de la otra accidentalmente, las cosas se romperán, aparentemente al azar. Este es un error muy difícil de localizar y es mejor evitarlo.
Para evitar conflictos de nombres, puede encerrar todo en su biblioteca dentro de una declaración de módulo. Esto requerirá que las personas se refieran a sus clases y método por un nombre completamente calificado como MyLibrary :: my_method, pero vale la pena ya que los conflictos de nombres generalmente no ocurrirán. Para las personas que desean tener todos sus nombres de clase y método en el ámbito global, pueden hacerlo utilizando el incluir declaración.
El siguiente ejemplo repite el ejemplo anterior pero encierra todo en un Mi biblioteca módulo. Dos versiones de my_program.rb son dados; uno que usa el incluir declaración y uno que no.
pone "test_library incluido"
módulo MyLibrary
clase TestClass
def inicializar
pone "objeto TestClass creado"
final
final
final
#! / usr / bin / env ruby
requiere 'test_library2.rb'
t = MyLibrary :: TestClass.new
#! / usr / bin / env ruby
requiere 'test_library2.rb'
incluir MyLibrary
t = TestClass.new
Debido a que los componentes reutilizables a menudo se mueven, también es mejor no usar rutas absolutas en sus llamadas requeridas. Un camino absoluto es un camino como /home/user/code/library.rb. Notarás que el archivo debe estar en esa ubicación exacta para que funcione. Si alguna vez se mueve el script o si su directorio de inicio cambia, esa declaración de requerimiento dejará de funcionar.
En lugar de rutas absolutas, a menudo es común crear un ./ lib directorio en el directorio de su programa Ruby. los ./ lib el directorio se agrega al $ LOAD_PATH variable que almacena los directorios en los que el método require busca archivos Ruby. Después de eso, si el archivo my_library.rb se almacena en el directorio lib, se puede cargar en su programa con un simple requiere 'my_library' declaración.
El siguiente ejemplo es el mismo que el anterior. test_program.rb ejemplos Sin embargo, se supone que el test_library.rb el archivo se almacena en el ./ lib directorio y lo carga utilizando el método descrito anteriormente.
#! / usr / bin / env ruby
$ LOAD_PATH << './lib'
requiere 'test_library.rb'
t = TestClass.new