Ich habe ein Modul MyModule
. Ich lade dynamisch Klassen hinein. Wie kann ich eine Liste der Klassen erhalten, die in ihrem Namespace definiert sind?
Beispiel:
def load_plugins
Dir.glob(File.dirname(__FILE__) + '/plugins/*.rb') do |f|
MyModule.class_eval File.read(f)
end
# now how can I find the new classes I've loaded into MyModule?
end
Ich sollte sagen, dass jedes so f
etwas wie "Klasse Foo; Ende" enthält.
Sie können sich das auch so vorstellen: Wie kann ich in Rails programmgesteuert alle im ActiveRecord-Modul definierten Klassen finden?
ruby
metaprogramming
Joshuaxls
quelle
quelle
===
. Wie der Name schon sagt, soll es implizit voncase
Ausdrücken verwendet werden, und außerhalb davon liefert es ziemlich verwirrenden Code. [Style Guide ]Wenn Sie sich auf Schienen befinden, müssen Sie zuerst auf die Konstanten zugreifen, damit sie angezeigt werden, da sie träge geladen sind.
MyModule::NotAClass = "not a class" MyModule.constants => [:NotAClass] MyModule::AClass => :AClass # Access class for it to be autoloaded MyModule.constants => [:AClass, :NotAClass] # Now, select the constants which are class instances MyModule.constants .map(&MyModule.method(:const_get)) .select { |constant| constant.is_a? Class} => [MyModule::AClass]**
quelle