2013-08-15 20 views
9

Genellikle, require ifadelerinin çoğunu bir dosyanın en üstüne koydum. Poltergeist için kaynak kodunu okurken, ben fark aşağıdaki`require` işlevinin üstte değil de bir modülde kullanılmasının avantajları nelerdir?

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

Actual source

require bu şekilde kullanmanın avantajları nelerdir?

cevap

6

bu durumda avantaj bu modüller gerekmektedir önce Capybara::Poltergeist modül var olmasıdır. Bu modüllerin tümü Capybara::Poltergeist modülünü genişletdiğinden, bu modül gerçekte kullanıma sunulmadan önce yüklenmediğinden emin olmanın bir yoludur. Modül tanımından sonra gereksinim ifadelerinin yerleştirilmesi aynı etkiye sahip olacaktır. olmayan iç içe Foo::Bar sözdizimi zaten bu modül denir zaman var olmaya Foo bekliyoruz çünkü

# foobar.rb 
require './bar_module' 

module Foo 
    module Bar 
    end 
end 

# bar_module.rb 
module Foo::Bar 
    def baz 
    "hi!" 
    end 
end 

Bu kurulum başarısız olur:

aşağıdaki düşünün.

module Foo 
    module Bar 
    require './bar_module' 
    end 
end 

Foo::Barbar_module başlar olan şey yapıyor o zaman var olacaktır, çünkü çalışacak gerektirir: ilk dosyayı değiştirerek. Poltergeist yuvalanmış modül sözdizimi (module Foo; module Bar) ziyade daraltılmış bir sözdizimi (module Foo::Bar) kullandığından bu özel durumda

, o kadar pratik etkisi yoktur, ancak temelde delineates iyi bir uygulamadır "Bunlar bu beklemek gerekir var olmak için modül.

2

Ben senin örnekte avantaj bilmiyorum.

bazen bir yöntem tanımı içinde require kullanın.

nadiren kullanılan yöntemler için bunu, ancak büyük kütüphaneleri gerekiyor. Avantaj: Büyük kütüphane, gerçekten gerektiğinde yüklenir.

require çekler, kütüphane zaten yüklü olmadığını. Bu yüzden kütüphaneye çift yükleme ile ilgili problemim yok.

+0

o özdevinimli_yükle yöntemi kullanmak yerine yöntemine içinde gerektirir takmadan daha iyi olmaz mı? Bence daha zarif bir çözüm olurdu, çünkü sadece araca ihtiyaç duyduğunda onu yüklerdim –

İlgili konular