Risposte:
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 globalefeaturesper vedere se la funzionalità desiderata è già stata fornita. In caso contrario, carica la funzione dal file appropriato . Questo file dovrebbe chiamareprovideal livello superiore per aggiungere la funzione afeatures; in caso contrario ,requiresegnala un errore .
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).