Quando dovremmo usare "use" e quando "require" e quando "AUTOLOAD" in perl
? Ho bisogno di una regola del pollice per questo.Quando utilizzare "use" e quando "require" e quando "AUTOLOAD" in perl [buona pratica di programmazione]?
risposta
use
è equivalente a BEGIN { require Module; Module->import(LIST); }
Quindi, la differenza principale è che:
Usa è utilizzato al momento della compilazione
Usa chiama automaticamente subroutine di importazione (che può fare nulla ma principalmente utilizzato per esportare identificatori nello spazio dei nomi del chiamante)
uso muore se il modulo non può essere caricato (mancanti/errore di compilazione)
Come tale:
Quando è necessario caricare moduli dinamicamente (ad esempio, determinare quale modulo da caricare in base agli argomenti della riga di comando), utilizzare
require
.In generale, quando è necessario controllare con precisione quando viene caricato un modulo, utilizzare
require
(use
caricherà destra modulo dopo il precedenteuse
oBEGIN
blocco, al momento della compilazione).Quando avete bisogno in qualche modo di bypass chiamando
import()
subroutine del modulo, utilizzare perrequire
Quando avete bisogno di fare qualcosa di intelligente per quanto riguarda la gestione degli errori di carico (manca il modulo, modulo non può compilare), si può avvolgere il
require
in una dichiarazioneeval { }
, quindi l'intero programma non solo muore.È possibile simularlo con
use
ma in modi piuttosto eleganti (il blocco del segnaledie
nel primoBEGIN
dovrebbe funzionare). Maeval { require }
è meglio.In tutti i casi diversi, utilizzare
use
non ho coprire AUTOLOAD come questa è una bestia diversa. Il suo utilizzo è nei casi in cui si desidera intercettare le chiamate alle subroutine che non sono state importate nello spazio dei nomi.
- 1. Quando usare `require`,` load` o `autoload` in Ruby?
- 2. Quando dovrei usare require() e quando usare define()?
- 3. Quando utilizzare JMS e quando utilizzare REST?
- 4. È buona pratica esportare variabili in Perl?
- 5. Quando utilizzare "nuovo" e quando non farlo, in C++?
- 6. Quando utilizzare socket.io e quando usare ajax
- 7. Quando utilizzare limit e quando non su
- 8. Quando utilizzare l'array di byte e quando utilizzare lo streaming?
- 9. Quando utilizzare os.Exit() e panic() in Golang?
- 10. Quando utilizzare segnali e slot e quando non a
- 11. Quando utilizzare e quando non utilizzare Python 3.5 `attendere '?
- 12. Quando utilizzare le categorie e quando utilizzare la sottoclasse?
- 13. Quando utilizzare un modulo e quando utilizzare una classe
- 14. Quando utilizzare Class.isInstance() e quando utilizzare l'operatore instanceof?
- 15. perl (buona pratica): filehandle lessicale per socket
- 16. Quando utilizzare le Proprietà e quando si Mappa in Java?
- 17. Quando utilizzare IEnumerable e GetEnumerator?
- 18. quando e perché utilizzare JumboEnumSet
- 19. Quando utilizzare Runtime.maxMemory() e totalMemory()
- 20. Quando utilizzare Proprietà e metodi?
- 21. Quando usare richiede e quando usare l'importazione in Aurelia?
- 22. Quando dovrei usare Import-Package e quando dovrei usare Require-Bundle?
- 23. Quando utilizzare, non utilizzare, OneToOne e ManyToOne
- 24. Quando utilizzare Meteor.methods e utilizzare gli stub
- 25. Quando utilizzare UserControl e Control in Silverlight?
- 26. Quando utilizzare @Version e @Audited in Hibernate?
- 27. Jedis - Quando utilizzare returnBrokenResource()
- 28. Quando utilizzare VARCHAR e DATE/DATETIME
- 29. Quando chiamare un "require" in Rails?
- 30. Quando utilizzare un tag/etichetta e quando diramazione?
In breve, generalmente si desidera "utilizzare". AUTOLOAD serve per intercettare le chiamate a metodi non definiti. – djsadinoff
Dal manuale: * Se non si desidera chiamare il metodo "import" del pacchetto (ad esempio, per impedire che il proprio spazio dei nomi venga modificato), fornire esplicitamente la lista vuota: * 'use Module();' –
@ Hynek-Pichi -Vychodil - fa la lista vuota salta chiamata 'import()' o chiama semplicemente 'import()' con la lista vuota e quindi non risulta nelle importazioni? – DVK