def Object.const_missing(name)
@looked_for ||= {}
str_name = name.to_s
raise “Class not found: #{name}” if @looked_for[str_name]
@looked_for[str_name] = 1
file = str_name.downcase
require file
klass = const_get(name)
return klass if klass
raise “Class not found: #{name}”
end
Vale Isaac, me he mirado el metodo const_missing(name), que es como
lo hace rails no?
A ver, con mis propias palabras diria “rails usa const_missing(name)
para busar la constante que yo paso a mi clase al hacer: include
Mimodulo”
Pregunta:
Cuando hago un include, el modulo que estoy llamando lo busca en el
archivo del mismo nombre en minusculas en el load_path que tiene
definido rails?
Como dice en la document. cuando yo llamo al modulo con include, ruby
llama al metodo append_features
http://www.ruby-doc.org/core/classes/Module.html#M001659 y este
metodo carga todos los: ( the constants
http://www.ruby-doc.org/core/classes/Module.html#M001679, methods,
and module variables of
this module ) Y en este momento es cuando rails llama a
const_missing???para saber si el modulo esta en el load_path?
Como ves no tengo el camino claro, pero sigo mirando, a ver si soy
capaz de explicarlo y explicarmelo claramente.
Esto de arriba muestra lo confuso que tengo de momento la vision
general de lo que es el funcionamiento del include. Pero volviendo al
codigo de arriba El const_missing, hay cosas que no entiendo en el
codigo
@looked_for ||= {}. Esto es un operado de ruby que es equivalente a
esto p.ej.:
if not @looked_for
@looked_for = {}
end
Es esto correcto, la variable @looked_for se asigna a un hash vacio si
no esta definida???
Y esto:
raise “Class not found: #{name}” if @looked_for[str_name]
Se produce un error si el name que se le pasa a const_missing no esta
en la variable @looked_for???
Esto si que no veo por donde me da el aire…
@looked_for[str_name] = 1 Por que se le asigna valor 1???
klass = const_get(name) esto lo que hace es retornar el valor de NAME.
return klass if klass. ESTO QUE??? retorna la Klass si la Klass que
(if Klass)??? ¿Que tiene que pasar para que la retorne?
Bueno, no os agobies con mis preguntas, que sólo expongo todas mis
dudas juntas, para que escojais alguna si os apetece y me voy
aclarando una por una
Gracias,
NOTA:
Si hay premio para el mensaje peor redactado y confuso del 2009,
seguro que lo gano. Espero ir aclarando el hilo para que quede
legible, pero ahora mismo esta confuso y es tarde y mi cabeza,…
Bueno, gracias de nuevo
El 14 de enero de 2009 16:38, Xavier N. [email protected] escribió:
2009/1/14 Andrés gutiérrez [email protected]: