Der Vorteil in diesem Fall ist, dass das Capybara::Poltergeist
Modul existiert, bevor diese Module benötigt werden. Da diese Module alle das Capybara::Poltergeist
Modul erweitern, ist dies nur eine Möglichkeit, sicherzustellen, dass sie nicht geladen werden, bevor das Modul tatsächlich verfügbar ist. Das Setzen der Require-Anweisungen nach der Moduldefinition hätte den gleichen Effekt.
Beachten Sie Folgendes:
# foobar.rb
require './bar_module'
module Foo
module Bar
end
end
# bar_module.rb
module Foo::Bar
def baz
"hi!"
end
end
Dieses Setup fehl, weil das nicht verschachtelte Foo::Bar
Syntax Foo
bereits durch die Zeit existiert dieses Modul aufgerufen wird, erwarten wird. Durch die Änderung der ersten Datei auf:
module Foo
module Bar
require './bar_module'
end
end
Das erfordert arbeiten, da Foo::Bar
durch die Zeit existieren wird, dass bar_module
beginnt seine Sache tut.
In diesem speziellen Fall ist es nicht viel praktische Wirkung hat, da Poltergeist die verschachtelte Modul Syntax (module Foo; module Bar
), anstatt die kollabierte Syntax (module Foo::Bar
) verwendet, aber es ist eine gute Praxis, dass „diese erfordern erwarten, dass dies im Grunde umreißt Modul zu existieren ".
Wäre es nicht besser, die Autoload-Methode zu verwenden, anstatt die require innerhalb der Methode einzufügen? Ich denke, es wäre eine elegantere Lösung, da ich es nur bei Bedarf auf den Anruf laden würde –