Différence entre le fichier de chargement et le chargement

17

J'ai parcouru la documentation des deux fonctions mais elles ne semblent pas apporter beaucoup d'informations. Quelle est la différence réelle entre eux, à part le fait qu'il loads'agit d'une fonction intégrée dans le code source C alors que load-file est une fonction compilée de liste interactive.

Quelle est la fonction recommandée à utiliser init.elpuisque les deux semblent faire le même travail?

Sibi
la source
2
Quelle partie de la documentation à ce sujet n'était pas claire à cet égard? Pensez à signaler le problème de doc, si vous pensez vraiment il y a un: M-x report-emacs-bug. Comme le dit @shosti, et comme le document l'indique clairement, load-file" n'utilise pas load-pathet n'ajoute pas de suffixes ", pour deux différences importantes.
Tiré
Voir aussi le manuel Emacs, node Lisp Libraries .
Drew

Réponses:

14

Il existe plusieurs façons de charger des fichiers Lisp dans Emacs:

  1. load-fileprend un nom de fichier littéral (relatif ou absolu) et charge le code. Exemple:(load-file "/usr/local/share/site-lisp/foo.el")
  2. loadest similaire load-file, sauf qu'il est plus flexible - vous pouvez omettre l'extension et elle chargera automatiquement le fichier "elc" ou "el" selon le cas.
    Il examine également les load-pathrépertoires.
    Exemple: (load "foo")(si "foo.el" est dans le répertoire courant ou dans le chemin de chargement ").
  3. load-libraryest une interface interactive pour load.
  4. requireest similaire à load, sauf qu'il empêche le fichier d'être chargé plus d'une fois (il nécessite également une provideinstruction correspondante à la fin du fichier en question). Exemple:(require 'foo)
shosti
la source
3
Votre requireexemple est un loadexemple. ;-)
Drew
L' load-fileexemple utilise load. :)
itsjeyd
2
Désolé de dire que 2 et 3 étaient faux. :-) - load t regard sur le chemin de charge.
Malabarba
@Malabarba Oups, vous avez raison, merci pour la correction. C'est plus déroutant que je ne le pensais.
shosti
8

load-fileet load-librarysont des commandes pour une utilisation interactive (où la principale différence réside dans le contenu initial de l'invite).

loadest la fonction sous-jacente à utiliser lorsque vous écrivez Elisp (comme dans votre .emacs).

Stefan
la source