Réponses:
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 globalefeaturespour voir si la fonctionnalité souhaitée a déjà été fournie. Sinon, il charge la fonction à partir du fichier approprié . Ce fichier doit appelerprovideau niveau supérieur pour ajouter la fonctionnalité àfeatures; s'il ne le fait pas,requiresignale une erreur .
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).