L'utilizzo richiede più volte sullo stesso simbolo idempotente?


11

È requireidempotente? cioè fare

(require 'helm)

e

(require 'helm)
(require 'helm)

finisci con lo stesso risultato?

Risposte:


14

Sì. Da Named Features (sottolineatura mia):

Il nome di una funzione è un simbolo che rappresenta una raccolta di funzioni, variabili, ecc. Il file che le definisce dovrebbe fornire la funzione. Un altro programma che li utilizza può garantire che siano definiti richiedendo la funzione. Questo carica il file di definizioni se non è già stato caricato.

Per richiedere la presenza di una funzione, chiamare requirecon il nome della funzione come argomento. requirecerca la variabile globale featuresper vedere se la funzionalità desiderata è già stata fornita. In caso contrario, carica la funzione dal file appropriato . Questo file dovrebbe chiamareprovide al livello superiore per aggiungere la funzione afeatures ; in caso contrario , requiresegnala un errore .


Accettato per la citazione dei documenti.
PythonNut,

Si prega di incorporare le informazioni dalla risposta di Gilles qui. Oppure, @Gilles, anche inserire questa risposta nella tua funzionerebbe.
Daveloyall,

13

Sì, a condizione che il codice rispetti helm.elo helm.elcrispetti la regola che deve chiamare (provide 'helm). La chiamata (provide 'helm)contrassegna il simbolo helmcome una funzione caricata e ciò fa sì che la seconda chiamata (require 'helm)non faccia nulla.

Se il pacchetto caricato non chiama providequindi requiresegnala un errore e la funzione non è contrassegnata come caricata, quindi una seconda chiamata per (require 'helm)tentare nuovamente il caricamento (e in genere fallisce di nuovo per lo stesso motivo).


+1 Grazie per le informazioni extra. Ha risolto la mia confusione dopo aver letto i documenti.
PythonNut,
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.