Przejrzałem dokumentację obu funkcji, ale wydaje się, że nie zawierają one zbyt wielu informacji. Jaka jest rzeczywista różnica między nimi, poza tym, że load
jest to wbudowana funkcja w kodzie źródłowym C, podczas gdy load-file jest funkcją kompilowaną na liście interaktywnej.
Jaka jest zalecana funkcja do użycia, init.el
ponieważ obie wydają się wykonywać tę samą pracę?
M-x report-emacs-bug
. Jak mówi @shosti i jak wyraźnie wskazuje dokument,load-file
„ nie używaload-path
i nie dołącza sufiksów ”, dla dwóch ważnych różnic.Odpowiedzi:
Istnieje kilka sposobów ładowania plików Lisp w Emacsie:
load-file
pobiera literalną nazwę pliku (względną lub bezwzględną) i ładuje kod. Przykład:(load-file "/usr/local/share/site-lisp/foo.el")
load
jest podobnyload-file
, z tą różnicą, że jest bardziej elastyczny - możesz pominąć rozszerzenie i automatycznie załaduje plik „elc” lub „el” odpowiednio.Przegląda także
load-path
katalogi.Przykład:
(load "foo")
(jeśli „foo.el” znajduje się w bieżącym katalogu lub w ścieżce ładowania ”).load-library
jest interaktywnym interfejsem dlaload
.require
jest podobny doload
, z tym że zapobiega ładowaniu pliku więcej niż jeden raz (wymaga także odpowiedniejprovide
instrukcji na końcu danego pliku). Przykład:(require 'foo)
źródło
require
przykład jestload
przykładem. ;-)load-file
przykładzie użytoload
. :)load
nie zajrzeć do obciążenia ścieżce.load-file
iload-library
są komendami do użytku interaktywnego (gdzie główna różnica polega na początkowej treści monitu).load
jest podstawową funkcją używaną podczas pisania Elisp (np. w .emacs).źródło