14

通常、私はほとんどのrequireステートメントをファイルの先頭に置きます。Poltergeist のソース コードを読んでいるときに、次のことに気付きました。

module Capybara
  module Poltergeist
    require 'capybara/poltergeist/utility'
    require 'capybara/poltergeist/driver'
    require 'capybara/poltergeist/browser'
    # more requires
  end
end

実際のソース

requireこの方法を使用する利点は何ですか?

4

2 に答える 2

9

この場合の利点は、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

require が機能するのは、それがその処理Foo::Barを開始するまでに存在するためbar_moduleです。

module Foo; module Barこの特定の例では、Poltergeist は折りたたまれた構文 ( ) ではなく、ネストされたモジュール構文 ( ) を使用するため、実際的な効果はあまりありませんがmodule Foo::Bar、基本的に「これらは、このモジュールが存在することを必要とする」と描写することをお勧めします。

于 2013-08-15T21:07:03.377 に答える