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 load
es 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.el
da beide scheinen, die gleiche Arbeit zu erledigen?
M-x report-emacs-bug
. Wie @shosti sagt und wie das Dokument klar angibt,load-file
" verwendetload-path
es keine Suffixe und hängt sie nicht an ", für zwei wichtige Unterschiede.Antworten:
Es gibt verschiedene Möglichkeiten, Lisp-Dateien in Emacs zu laden:
load-file
Nimmt einen wörtlichen Dateinamen (relativ oder absolut) und lädt den Code. Beispiel:(load-file "/usr/local/share/site-lisp/foo.el")
load
ist wieload-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-path
Verzeichnisse.Beispiel:
(load "foo")
(wenn "foo.el" im aktuellen Verzeichnis oder im Ladepfad ist ").load-library
ist eine interaktive Schnittstelle fürload
.require
ist ähnlichload
, außer dass verhindert wird, dass die Datei mehr als einmal geladen wird (es ist auch eine entsprechendeprovide
Anweisung am Ende der betreffenden Datei erforderlich ). Beispiel:(require 'foo)
quelle
require
Beispiel ist einload
Beispiel. ;-)load-file
Beispiel verwendetload
. :)load
tut Blick in den Last-Pfad.load-file
undload-library
sind Befehle für die interaktive Verwendung (wobei der Hauptunterschied im ursprünglichen Inhalt der Eingabeaufforderung liegt).load
ist die zugrunde liegende Funktion , die verwendet wird, wenn Sie Elisp schreiben (z. B. in Ihren .emacs).quelle