この場合の利点は、これらのモジュールが必要となる前にCapybara::Poltergeist
モジュールが存在することです。これらのモジュールはすべてCapybara::Poltergeist
モジュールを拡張しているので、モジュールが実際に利用可能になる前にそれらがロードされていないことを保証する方法です。 require文をモジュール定義の後に置くと、同じ効果が得られます。
は、次のことを考えてみましょう:
# foobar.rb
require './bar_module'
module Foo
module Bar
end
end
# bar_module.rb
module Foo::Bar
def baz
"hi!"
end
end
非ネストされたFoo::Bar
構文はFoo
は既にこのモジュールが呼び出された時点で存在することを期待しますので、このセットアップは失敗します。最初のファイルを変更することにより:
module Foo
module Bar
require './bar_module'
end
end
ザ・はFoo::Bar
がbar_module
開始はそのことをやっている時間によって存在することから、動作しますが必要です。この特定の例では
、ポルターガイストは、ネストされたモジュールの構文(module Foo; module Bar
)ではなく崩壊構文(module Foo::Bar
)を使用しているので、それは、多くの実用的な効果を持っていないが、それは基本的にこれらは、このことを期待して必要とする「線引きするとよいでしょうモジュールを存在させる "。
メソッドの中にrequireを挿入するのではなく、autoloadメソッドを使用するほうがよいでしょうか?私はコールで必要なときにのみロードするので、より洗練されたソリューションになると思います –