Je viens de commencer à utiliser emacs il y a quelques jours et j'ai lu quelque part qui (require 'package-name)
n'est pas nécessaire lorsque ledit package est installé à l'aide de package-install. Mais pourquoi, qu'est-ce qui fait (require 'package-name)
réellement et en quoi diffère-t-il load-file
ou load
procédures?
10
M-x describe-function
de lire la doc-string. akaC-h f
TapezM-x describe-function RET require RET
et lisez la doc-string. Tapez ensuiteM-x describe-function RET load-file RET
et lisez la doc-string. Tapez ensuiteM-x describe-function RET load RET
et lisez la doc-string. Après avoir lu les trois chaînes de doc, veuillez modifier votre question pour comparer et contraster les trois fonctions et clarifier ce que vous ne comprenez toujours pas par rapport à celles-ci. Nous utilisons la même procédure pour les variables - à savoir,M-x describe-variable
.Réponses:
Si vous
load
une bibliothèque à plusieurs reprises, ce fichier sera lu et son code évalué à plusieurs reprises (à chaque fois que vous le chargez).Si vous
require
une bibliothèque à plusieurs reprises, il seraload
la bibliothèque une fois (au plus - et pas du tout si la bibliothèque avait déjà été chargée).require
fournit cette efficacité même si ellerequire
n'était pas utilisée pour charger la bibliothèque au départ, car (la grande majorité des) bibliothèques contiennent le code(provide 'FEATURE)
de leurFEATURE
nom particulier . Ce code est évalué lors du chargement de la bibliothèque, quelle que soit la façon dont il a été chargé, et à ce moment-là, il met à jour les données quirequire
vérifient lorsqu'il décide s'il doit faire quelque chose.Généralement, vous souhaitez utiliser
require
dans votre propre code, si vous devez vous assurer qu'une bibliothèque donnée a été chargée.La raison pour laquelle vous n'avez souvent pas besoin de le faire avec les packages ELPA est que le gestionnaire de packages traite automatiquement tous les cookies de chargement automatique dans le package et génère un fichier de chargement automatique pour ce package. Lorsque le système de packages est initialisé lorsque vous démarrez Emacs, le fichier de chargement automatique de chaque package est évalué, qui identifie toutes les fonctions chargées automatiquement. Lorsqu'une fonction chargée automatiquement est appelée, la bibliothèque qui contient la définition réelle de la fonction est automatiquement chargée.
Les auteurs de packages peuvent ajouter un cookie de chargement automatique à chaque fonction que l'utilisateur pourrait appeler directement et donc, à condition que leurs attentes soient correctes, vous n'aurez pas besoin d'appeler
require
ou de charger explicitement le package pour l'utiliser.Notez que vous pouvez également définir vos propres chargements automatiques personnalisés. Voir C-hig
(elisp) Autoload
RETet aussi(elisp) Hooks for Loading
si vous souhaitez utiliser le chargement différé personnalisé et la configuration différée des bibliothèques dans votre propre configuration. (Ce dernier pour dire "n'évalue pas ce code jusqu'à ce que cette bibliothèque ait été chargée", ce qui correspond bien au mécanisme de chargement automatique "ne charge pas cette bibliothèque tant qu'il n'est pas nécessaire").la source
(elisp) Named Features
.