2010-09-25 30 views
11

Tengo una carpeta llena de archivos ruby, y cuando intento y requiero un archivo en otro que está en el mismo directorio usando require 'file' obtengo un LoadError pero cuando uso require './file' todo funciona bien. ¿Alguien puede explicarme por qué sucede esto y si hay alguna manera de que pueda requerir un archivo sin agregar un ./ en el archivo?Ruby require 'file' no funciona, pero requiere './file'. ¿Por qué?

(Cuadro de directorio): alt text

+0

posible duplicado de (http [¿Cuál es la diferencia entre requerir \ _relative y requieren en Ruby?]: // stackoverflow. com/questions/3672586/what-is-the-difference-between-require-relative-and-require-in-ruby) –

Respuesta

16

Si desea require un archivo no del sistema de $LOAD_PATH sino más bien en relación con el directorio del archivo que son require ing de, debe utilizar require_relative. (Que, como puede ver, no es exactamente ampliamente documentado)

3

Usted no tiene directorio actual en su LOADPATH.

Comprobar el contenido de la $ LOAD_PATH variables

0

Aunque es una publicación muy antigua, creo que alguna información adicional será muy útil para los principiantes.

La mejor manera de pensar en requerir es en relación con la variable UNIX $ PATH. A modo de repaso, la variable $ PATH en UNIX es una lista de directorios donde se pueden encontrar ejecutables. Por lo tanto, cuando escribe el nombre de un programa en cualquier terminal UNIX, su computadora está mirando los archivos ejecutables en los directorios especificados en su variable $ PATH. requiere algo muy similar. Cuando, por ejemplo, escribe requiere 'establecer' en la parte superior de su archivo Ruby, le está diciendo a Ruby que busque en un grupo de directorios una biblioteca llamada set.rb (biblioteca de conjuntos de Ruby).

Entonces, ¿dónde busca Ruby set.rb? Bueno, una vez más, Ruby tiene algo muy similar a la variable $ PATH de UNIX. Es la variable global $ LOAD_PATH también a veces conocida por su alias feo y no descriptivo $: (que no sugiero usar por el camino, por breve que sea). Es una matriz de nombres de directorio donde se ve Ruby cuando se trata de un requerimiento.

Hay buen puesto informativo here donde se puede obtener más información acerca de require, load y require_relative