Se load
una libreria viene ripetuta, quel file verrà letto e il suo codice verrà valutato ripetutamente (ogni volta che lo si carica).
Se require
una libreria è ripetutamente, sarà load
la libreria una volta (al massimo - e per niente se la libreria era già stata caricata).
require
fornisce questa efficienza anche se require
inizialmente non è stata utilizzata per caricare la libreria, poiché (la stragrande maggioranza delle) librerie contengono il codice (provide 'FEATURE)
per il loro FEATURE
nome specifico . Quel codice viene valutato quando la libreria viene caricata, indipendentemente da come è stata caricata, e in quel momento aggiorna i dati che require
controllano quando decide se deve fare qualcosa.
Principalmente si desidera utilizzare require
nel proprio codice, se è necessario assicurarsi che una determinata libreria sia stata caricata.
Il motivo per cui spesso non è necessario eseguire questa operazione con i pacchetti ELPA è che il gestore pacchetti elabora automaticamente i cookie di caricamento automatico nel pacchetto e genera un file di caricamenti automatici per quel pacchetto. Quando il sistema di pacchetti viene inizializzato all'avvio di Emacs, viene valutato il file di caricamento automatico per ciascun pacchetto, che identifica tutte le funzioni di caricamento automatico. Quando viene chiamata una funzione caricata automaticamente , la libreria che contiene la definizione reale della funzione viene caricata automaticamente.
Gli autori di pacchetti possono aggiungere un cookie di caricamento automatico a ciascuna funzione che l'utente dovrebbe chiamare direttamente e quindi, a condizione che le loro aspettative fossero corrette, non sarà necessario chiamare require
o caricare esplicitamente il pacchetto per poterlo utilizzare.
Tieni presente che puoi anche definire i tuoi caricamenti automatici personalizzati. Vedere C-hig (elisp) Autoload
RETe anche (elisp) Hooks for Loading
se si desidera utilizzare la configurazione differita personalizzata delle librerie a caricamento lento e nella propria configurazione. (Quest'ultimo a dire "non valutare questo codice fino a quando questa libreria non è stata caricata", che si lega bene con il meccanismo di caricamento automatico "non caricare questa libreria fino a quando non è necessario").
M-x describe-function
leggere la stringa di documenti. akaC-h f
DigitareM-x describe-function RET require RET
e leggere la stringa di documenti. Quindi digitareM-x describe-function RET load-file RET
e leggere la stringa di documenti. Quindi digitareM-x describe-function RET load RET
e leggere la stringa di documenti. Dopo aver letto tutte e tre le stringhe di documenti, modifica la tua domanda per confrontare e contrastare tutte e tre le funzioni e chiarire cosa non riesci ancora a capire in relazione ad esse. Usiamo la stessa procedura per le variabili, ad esM-x describe-variable
.