Unterschied zwischen load-file und load

17

Ich habe die Dokumentation beider Funktionen durchgesehen, aber sie scheinen nicht viele Informationen zu verbreiten. Was ist der eigentliche Unterschied zwischen ihnen, abgesehen von der Tatsache, dass loades sich um eine in C-Quellcode integrierte Funktion handelt, während load-file eine interaktive, mit Listen kompilierte Funktion ist.

Was ist die empfohlene Funktion, um zu verwenden, init.elda beide scheinen, die gleiche Arbeit zu erledigen?

Sibi
quelle
2
Welcher Teil der Dokumentation dazu war diesbezüglich nicht klar? Betrachten Sie das doc Problem melden, wenn Sie wirklich denken , es ist eins: M-x report-emacs-bug. Wie @shosti sagt und wie das Dokument klar angibt, load-file" verwendet load-pathes keine Suffixe und hängt sie nicht an ", für zwei wichtige Unterschiede.
Drew
Siehe auch das Emacs-Handbuch, Knoten Lisp-Bibliotheken .
Drew

Antworten:

14

Es gibt verschiedene Möglichkeiten, Lisp-Dateien in Emacs zu laden:

  1. load-fileNimmt einen wörtlichen Dateinamen (relativ oder absolut) und lädt den Code. Beispiel:(load-file "/usr/local/share/site-lisp/foo.el")
  2. loadist wie load-file, außer dass es flexibler ist - Sie können die Erweiterung weglassen und es wird automatisch die "elc" - oder "el" -Datei entsprechend laden.
    Es schaut auch in die load-pathVerzeichnisse.
    Beispiel: (load "foo")(wenn "foo.el" im aktuellen Verzeichnis oder im Ladepfad ist ").
  3. load-libraryist eine interaktive Schnittstelle für load.
  4. requireist ähnlich load, außer dass verhindert wird, dass die Datei mehr als einmal geladen wird (es ist auch eine entsprechende provideAnweisung am Ende der betreffenden Datei erforderlich ). Beispiel:(require 'foo)
Shosti
quelle
3
Ihr requireBeispiel ist ein loadBeispiel. ;-)
Drew
Das load-fileBeispiel verwendet load. :)
itsjeyd
2
Tut mir leid, dass 2 und 3 falsch waren. :-) load tut Blick in den Last-Pfad.
Malabarba
@Malabarba Ups, du hast recht, danke für die Korrektur. Das ist verwirrender als ich dachte.
Shosti
8

load-fileund load-librarysind Befehle für die interaktive Verwendung (wobei der Hauptunterschied im ursprünglichen Inhalt der Eingabeaufforderung liegt).

loadist die zugrunde liegende Funktion , die verwendet wird, wenn Sie Elisp schreiben (z. B. in Ihren .emacs).

Stefan
quelle