Ich benutze Module als Namespaces in Ruby. Wie würde ich über Autoloading gehen ... etwas wie autoload :"App::ModuleA", 'app/module_a
, das einen Fehler "muss konstante Name sein" nicht werfen?Autoload mit Namespaces/Submodulen
7
A
Antwort
11
Sie benötigen ein Symbol autoload
(wahrscheinlich ein Tippfehler in Ihrer Frage) zu übergeben, und es auf die Eltern der Konstanten nennen, wie:
App.autoload :ModuleA, "app/module_a"
Beachten Sie, dass dies auch für verschachtelte Ebenen funktioniert. Sagen Sie, dass in app/module_a
Sie haben:
module App::ModuleA
autoload :Inner, "path/to/inner"
end
Wenn Rubin App::ModuleA::Inner
trifft, wird es zunächst versuchen ModuleA
zugreifen zu können, gelingt durch selbstladende, und nur dann Inner
versuchen, was auch gelingt, weil sie jetzt, wo sie automatisch geladen es weiß.
Ich verstehe das. Aber ich möchte nicht initialisieren, wenn ich ein Constant ModuleA aufruft, ich möchte es aufrufen, wenn jemand 'App :: ModuleA' sagt. –
In der Tat, deshalb möchten Sie' App.autoload' aufrufen, nicht nur 'autoload' . Probieren Sie es aus, es wird funktionieren wie Sie wollen. –
aaaah ... ich verstehe. Vielen Dank :) –