tipos que programacion namespace metodos metodo mayuscula importar ejemplos definir como clases ruby

ruby - metodos - que es namespace en programacion



¿Cómo obtener todos los nombres de clase en un espacio de nombres en Ruby? (4)

En resumen, no. Sin embargo, puede mostrar todas las clases que se han cargado. Entonces primero tienes que cargar todos los archivos de clase en el espacio de nombres:

Dir["#{File.dirname(__FILE__)}/lib/foo/*.rb"].each {|file| load file}

entonces puedes usar un método como el de Jörg W Mittag para enumerar las clases

Foo.constants.map (y Foo.method (: const_get)). Grep (Clase)

Tengo un módulo Foo , que es el espacio de nombres para muchas clases como Foo::Bar , Foo::Baz etc.

¿Hay alguna forma de devolver todos los nombres de clase cuyo nombre haya ocupado Foo ?


Esto solo devolverá las constantes cargadas bajo el espacio de nombres dado porque ruby ​​usa un enfoque de carga lenta. Entonces, si escribes

Foo.constants.select {|c| Foo.const_get(c).is_a? Class}

conseguirás

[]

pero después de tipear:

Foo::Bar

conseguirás

[:Bar]


Si, en lugar de los nombres de las constantes, quieres las clases, puedes hacerlo así:

Foo.constants.map(&Foo.method(:const_get)).grep(Class)


Foo.constants

devuelve todas las constantes en Foo . Esto incluye, pero no se limita a, nombres de clase. Si solo quieres nombres de clase, puedes usar

Foo.constants.select {|c| Foo.const_get(c).is_a? Class}

Si desea nombres de clase y módulo, puede usar is_a? Module is_a? Module lugar de is_a? Class is_a? Class .