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?

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 .


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).


+1 Merci pour l'info supplémentaire. Cela a résolu ma confusion après avoir lu les documents.
PythonNut
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.