Cosa significa (richiede 'pacchetto) per emacs e in cosa differisce da load-file?


10

Ho appena iniziato a usare emacs alcuni giorni fa e ho letto da qualche parte che (require 'package-name)non è necessario quando il pacchetto è installato usando package-install. Ma perché, cosa fa (require 'package-name)effettivamente e in che cosa differisce load-fileo dalle loadprocedure?


7
Una delle prime cose che tutti abbiamo dovuto imparare in Emacs è M-x describe-functionleggere la stringa di documenti. aka C-h fDigitare M-x describe-function RET require RETe leggere la stringa di documenti. Quindi digitare M-x describe-function RET load-file RETe leggere la stringa di documenti. Quindi digitare M-x describe-function RET load RETe 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 es M-x describe-variable.
elenco delle leggi

Risposte:


13

Se loaduna libreria viene ripetuta, quel file verrà letto e il suo codice verrà valutato ripetutamente (ogni volta che lo si carica).

Se requireuna libreria è ripetutamente, sarà loadla libreria una volta (al massimo - e per niente se la libreria era già stata caricata).

requirefornisce questa efficienza anche se requireinizialmente non è stata utilizzata per caricare la libreria, poiché (la stragrande maggioranza delle) librerie contengono il codice (provide 'FEATURE)per il loro FEATUREnome specifico . Quel codice viene valutato quando la libreria viene caricata, indipendentemente da come è stata caricata, e in quel momento aggiorna i dati che requirecontrollano quando decide se deve fare qualcosa.

Principalmente si desidera utilizzare requirenel 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 requireo 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 Loadingse 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").


2
Dato che stai già facendo riferimento al manuale Elisp, penso che sia un altro nodo pertinente (elisp) Named Features.
Basilio,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.