Tengo un archivo externo: path_to_external_file.rb
con un poco de definición de clase:Carga de archivos externos dentro de una clase/módulo
class A
some_definitions
end
Y quiero cargar que dentro del módulo B
para que la clase A
definido anteriormente se puede denominar como B::A
. Probé:
class B
load('path_to_external_file.rb')
end
pero A
se define en el entorno principal, no en B
:
A #=> A
B.constants # => []
¿Cómo puedo cargar archivos externos dentro de alguna clase/módulo?
Editar ¿Debo leer los archivos externos como cadenas, y evaluarlos dentro Class.new{...}
, y que include
clase dentro B
?
¿para qué fin? ¿Por qué no puedes usar la clase A directamente?¿Está obteniendo algún beneficio de modularizarlo? 'load' y' require' en realidad no cargarán una clase en un módulo, solo cargarán el código fuente, por lo que sus clases se definirán exactamente como están en el archivo. ¿No estás seguro de por qué quieres hacer esto? – brad
@brad Debido a que estos archivos externos deben ser escritos por los usuarios, y pueden llamarse arbitrarios. Si defino esas clases dentro del entorno principal, arruinarán el espacio de nombres. – sawa
Tenga cuidado con la alteración de otros espacios de nombres a través de 'ObjectSpace # each_object'. – Reactormonk