Il vantaggio in questo caso è che il modulo Capybara::Poltergeist
esiste prima che questi moduli siano richiesti. Poiché questi moduli estendono tutti il modulo Capybara::Poltergeist
, questo è solo un modo per assicurarsi che non vengano caricati prima che il modulo sia effettivamente disponibile. Posizionare le istruzioni require dopo la definizione del modulo avrebbe lo stesso effetto.
Si consideri il seguente:
# foobar.rb
require './bar_module'
module Foo
module Bar
end
end
# bar_module.rb
module Foo::Bar
def baz
"hi!"
end
end
Questa configurazione non riuscirà perché la Foo::Bar
sintassi non-nested si aspetta Foo
di esistere già dal momento in cui questo modulo si chiama. Modificando il primo file a:
module Foo
module Bar
require './bar_module'
end
end
Il richiede funziona, dal momento che Foo::Bar
esisterà per il momento che bar_module
comincia a fare la sua cosa.
In questo particolare esempio, non ha effetti pratici, poiché Poltergeist utilizza la sintassi nidificata modulo (module Foo; module Bar
) anziché la sintassi compresso (module Foo::Bar
), ma è una buona pratica che delinea sostanzialmente "questi richiede durante questo modulo per esistere ".
fonte
2013-08-15 21:07:03
Non sarebbe meglio usare il metodo di caricamento automatico invece di inserire la richiesta all'interno del metodo? Penso che sarebbe una soluzione più elegante, dal momento che vorrei caricarlo solo quando necessario per la chiamata –