Est require
idempotent? c'est-à-dire
(require 'helm)
et
(require 'helm)
(require 'helm)
fin avec le même résultat?
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
require
avec le nom de la fonction comme argument.require
regarde dans la variable globalefeatures
pour 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,require
signale une erreur .
Oui, à condition que le code respecte
helm.el
ouhelm.elc
respecte la règle qu'il doit appeler(provide 'helm)
. L'appel(provide 'helm)
marque le symbolehelm
comme une entité chargée , ce qui fait que le deuxième appel(require 'helm)
ne fait rien.Si le package chargé ne remet pas
provide
alorsrequire
signale 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).la source