Kiedy należy używać "użytkowania" i "wymagać" oraz "AUTOLOAD" w perl
? Potrzebuję do tego reguły kciuka.Kiedy należy używać "używać" i kiedy "wymagać" i "AUTOLOAD" w perlu [dobra praktyka programowania]?
Kiedy należy używać "używać" i kiedy "wymagać" i "AUTOLOAD" w perlu [dobra praktyka programowania]?
Odpowiedz
use
jest równoważna BEGIN { require Module; Module->import(LIST); }
Tak, główną różnicą jest to, że:
użycie jest używany w czasie kompilacji
Wykorzystanie automatycznie wywołuje podprogram importu (co może zrobić niczego ale najczęściej używane do eksportowania identyfikatorów do przestrzeni nazw rozmówcy)
użycie umrze, jeśli moduł nie może być załadowany (brak/błąd kompilacji)
jako takie:
Kiedy trzeba załadować moduły dynamicznie (na przykład określić, które moduł do ładowania na podstawie argumentów wiersza poleceń), użyj
require
.W ogóle, kiedy trzeba dokładnie kontrolować, gdy moduł jest załadowany, należy
require
(use
będzie załadować odpowiedni moduł po poprzednimuse
lubBEGIN
bloku w czasie kompilacji).Kiedy trzeba jakoś bypass wywołanie modułu
import()
podprogram, należyrequire
Kiedy trzeba zrobić coś inteligentnego miarę obsługi błędów obciążenie (moduł, moduł nie można skompilować brakuje), można owinąć
require
w oświadczeniu, więc cały program nie tylko umiera.Można to zasymulować za pomocą
use
, ale w raczej elegancki sposób (blokowanie sygnałudie
we wczesnym blokudie
powinno działać). Aleeval { require }
jest lepszy.We wszystkich innych przypadkach należy użyć
use
nie pokrywają autoLoad jak to już zupełnie inna bestia. Jego użycie ma miejsce w przypadku, gdy chcesz łączyć wywołania podprocedur, które nie zostały zaimportowane do twojej przestrzeni nazw.
- 1. Kiedy należy używać JCR i kiedy należy używać JPA/RDBMS?
- 2. Kiedy należy używać setUpClass i kiedy __init__?
- 3. Kiedy używać viewDidLoad i kiedy używać awakeFromNib
- 4. Kiedy używać node.js i kiedy używać ajax?
- 5. kiedy używać zadania i kiedy używać wątku?
- 6. Kiedy należy używać AQL?
- 7. Kiedy należy używać _aligned_malloc()?
- 8. Kiedy należy używać WS_EX_NOREDIRECTIONBITMAP?
- 9. Kiedy należy używać ConcurrentSkipListMap?
- 10. Kiedy należy używać ConcurrentDictionary i Dictionary?
- 11. Kiedy należy używać perror ("...") i fprintf (stderr, "...")?
- 12. Kiedy używać dup i kiedy używać klonu w Ruby?
- 13. W Objective-C, kiedy należy używać metod klas i kiedy należy używać metod instancji?
- 14. Kiedy należy korzystać i kiedy należy importować w Aurelia?
- 15. Kiedy należy używać ORM doktryny i kiedy zend-db-table?
- 16. Kiedy używać undef_method i kiedy używać metody remove_method?
- 17. Kiedy należy używać plików XSD?
- 18. Kiedy należy używać git skrytki?
- 19. Android: Kiedy należy używać FragmentTransaction.remove?
- 20. Kiedy należy używać uprawnienia ACCESS_COARSE_LOCATION?
- 21. Kiedy należy używać html5 sessionStorage?
- 22. Kiedy należy używać atrybutu KnownType?
- 23. Kiedy należy używać "prototypu" w JavaScript
- 24. Kiedy należy używać ramek HTML?
- 25. Kiedy należy używać jednolitej inicjalizacji?
- 26. Kiedy należy używać sortowania Radix?
- 27. Kiedy należy używać niejawnego przesyłania?
- 28. Kiedy używać GWT i kiedy nie
- 29. Kiedy używać Formatera wartości i kiedy używać Resolvera wartości
- 30. Kiedy używać Requirejs i kiedy używać dołączonego javascript?
Krótko mówiąc, ogólnie chcesz "używać". AUTOLOAD służy do wywoływania wywołań niezdefiniowanych metod. – djsadinoff
Od instrukcji: * Jeśli nie chcesz wywoływać metody "importu" pakietu (na przykład, aby przerwać zmianę przestrzeni nazw), jawnie podaj pustą listę: * 'użyj modułu();' –
@ Hynek-Pichi -Vychodil - czy pusta lista pomija wywołanie 'import()' lub po prostu wywołuje 'import()' z pustą listą, a zatem nie powoduje importu? – DVK