Hola,
Tengo un directorio que contiene diversas clases. Estas clases tienen
ciertas dependencias entre ellas. Por ejemplo una clase puede extender
de otra. Estoy tratando de cargarlas con “require” dinamicamente pero
estoy obteniendo:
uninitialized constant
Esto sucede porque estoy tratando de require una clase que extiende de
otra que no he require todavia. Alguien sabe como puede cargarlas
dinamicamente y manejar esas dependencias? (mas o menos como hace rails
al cargar las clases)
Gracias,
ElÃas
Estimado Elias,
Una cosa que puedes hacer es redefinir el hook const_missing en la clase
module ya que cuando se encuentra una referencia a un simbolo que no
est’e
definido 'este se invoca. Salvando las distancias rails aplica una
convencion de manera que cuando se encuentra un simbolo no definido y se
invoca al hook const-missing, su implementacion hace una carga del
modulo
homonimo al simblo no definido (sustituyendo camel cases por underscores
y
andiamientos ( :: ) por separadores de ruta ( / ).
Es una explicacion un poco rapida. Pero si quieres mas detalles
obtendras
pistas googleando los siguientes t’erminos: ruby metaprogramming
const_missing
Espero que te sirva de algo.
Un saludo,
Miguel
http://miguelfernandez.info
(Desde el m’ovil)
On Apr 3, 2009 10:56 PM, “Elias O.”
[email protected]
wrote:
Hola,
Tengo un directorio que contiene diversas clases. Estas clases tienen
ciertas dependencias entre ellas. Por ejemplo una clase puede extender
de otra. Estoy tratando de cargarlas con “require” dinamicamente pero
estoy obteniendo:
uninitialized constant
Esto sucede porque estoy tratando de require una clase que extiende de
otra que no he require todavia. Alguien sabe como puede cargarlas
dinamicamente y manejar esas dependencias? (mas o menos como hace rails
al cargar las clases)
Gracias,
ElÃas
Posted via http://www.ruby-forum.com/.
2009/4/3 Elias O. [email protected]:
al cargar las clases)
Si uno esta fuera de Rails la aproximacion es distinta. Si a.rb
necesita tener B definido, pues hace un require
require ‘b’
class A < B
…
end
Esa es la manera de trabajar en Ruby. Y ya hagas un preloading o no,
eso es lo que resuelve las dependencias.