In meiner app, ich habeWie beziehe ich mich auf den vollständigen Pfad eines Submoduls in Ruby?
VeryUniqueModule::Foo
# and…
VeryUniqueModule::Bar
Foo
und Bar
jeweils für einen anderen Dienst. Ein Teil meiner App muss dynamisch herauszufinden, welches Modul zu beziehen, was es tut, wie so kompetent:
def service_api
# @relevant_object.service is a string that is either 'Foo' or 'Bar'
VeryUniqueModule.const_get(@relevant_object.service)
end
Mehr dazu später.
Ich habe gerade eine Bibliothek aktualisiert, und es hat jetzt eine eigene Foo
Klasse der obersten Ebene (die schlechtes Design ihrerseits ist). Wenn ich jetzt versuche, @relevant_object.service_api::A_CONSTANT
aufzurufen, beschwert sich meine App, dass die -BibliothekFoo
A_CONSTANT
nicht hat.
Zurück zu service_api
oben - ich dachte, dass const_get
die Klasse selbst zurück gab. Tatsächlich weiß ich, dass es ist. Wenn ich es in irb
fire alles ist wie erwartet - der Rückgabewert ist die Klasse selbst, und ich kann Dinge in der Klasse aufrufen. So ...
- Wie ist es möglich, dass es einen Namespace-Konflikt in erster Linie gibt? Ich suche auf dem Klassenobjekt zurückgegeben von
service_api
, nicht auf eine Zeichenfolge, die icheval
ing oder etwas so funky - es sollte keine Namespace-Probleme, ich verweise direkt auf ein Objekt ! - Wenn dies in der Tat ein Problem ist, wie kann ich
service_api
beheben, so dass es die, ähm, "vollständigen Pfad" zurückgibt?
Was Sie tun, scheint in Ordnung zu sein. Wahrscheinlich gibt es irgendwo anders einen Fehler. –