L'utilisation de plusieurs fois sur le même symbole est-elle idempotente?

11

Est requireidempotent? c'est-à-dire

(require 'helm)

et

(require 'helm)
(require 'helm)

fin avec le même résultat?

PythonNut
la source

Réponses:

14

Oui. À partir des fonctionnalités nommées (c'est moi qui souligne):

Un nom de fonction est un symbole qui représente une collection de fonctions, de variables, etc. Le fichier qui les définit doit fournir la fonction. Un autre programme qui les utilise peut garantir leur définition en exigeant la fonctionnalité. Cela charge le fichier de définitions s'il n'a pas déjà été chargé.

Pour exiger la présence d'une fonction, appelez requireavec le nom de la fonction comme argument. requireregarde dans la variable globale featurespour voir si la fonctionnalité souhaitée a déjà été fournie. Sinon, il charge la fonction à partir du fichier approprié . Ce fichier doit appelerprovide au niveau supérieur pour ajouter la fonctionnalité àfeatures ; s'il ne le fait pas, requiresignale une erreur .

lunaryorn
la source
Accepté pour citer les documents.
PythonNut
Veuillez incorporer ici les informations de la réponse de Gilles. Ou, @Gilles, mettre cette réponse dans la vôtre fonctionnerait aussi.
daveloyall
13

Oui, à condition que le code respecte helm.elou helm.elcrespecte la règle qu'il doit appeler (provide 'helm). L'appel (provide 'helm)marque le symbole helmcomme une entité chargée , ce qui fait que le deuxième appel (require 'helm)ne fait rien.

Si le package chargé ne remet pas providealors requiresignale une erreur, et que la fonction est pas marqué comme chargé, donc un second appel à (require 'helm)tenterait à nouveau le chargement (et généralement échouer à nouveau pour la même raison).

Gilles 'SO- arrête d'être méchant'
la source
+1 Merci pour l'info supplémentaire. Cela a résolu ma confusion après avoir lu les documents.
PythonNut