2011-02-08 18 views
5

Vamos a considerar tengo una clase dentro de un trazado módulo muy largo:¿Cómo no escribir la ruta completa del módulo en ruby?

sux = Really::Long::Module::Path::Sucks.new 

Podría yo de alguna manera "importación" de este módulo de una manera que solo podía usar la clase sin tener que preocuparse de escribir este camino cada vez que lo uso ?

EDIT: Sé que estar en el mismo módulo facilita las cosas. Pero no puedo estar en el mismo módulo en este caso.

+0

-1 por profanidad. –

+0

¿Qué quieres decir? Mi profanidad está escrita aquí, tu santidad no es, sé claro para que la gente pueda aprender de ello. –

+0

Si no sabe lo que significa la palabra, búsquela aquí: [blasfemia] (http://en.wiktionary.org/wiki/profanity) –

Respuesta

4

Los módulos son un objeto en ruby, por lo que puede hacer una referencia al módulo que es más corto.

Sux = Really::Long::Module::Path::Sucks 
Sux.new 
+0

Vaya, no leyó su pregunta con cuidado. Definitivamente vaya a la ruta 'include'. No puedo eliminar esta pregunta ya que este es un enfoque válido en algunos casos (a menos que alguien se oponga). – cam

+0

esto suena de hecho una forma más adecuada para usar solo un tipo de otro módulo. Incluir un módulo también puede ser un poco más caro, así que cambié de opinión, esta es ahora mi respuesta elegida. –

+0

Simplemente cambiaría esa segunda línea, ya que Sux ahora es un alias de la clase Sucks, no una instancia de la misma. Sux.new haría eso. –

3

en su clase:

include Really::Long::Module::Path 

Esto básicamente se mezcla todo de las constantes de ese módulo/métodos en la clase que incluye, por lo que a continuación, puede utilizar la clase Sucks directamente:

sux = Sucks.new 
2
module A; module B; module C; module D 
    class E; end 
end; end; end; end 

class Sanity 
    include A::B::C::D 
    puts E.new.object_id 
end 
Cuestiones relacionadas