Różnica między plikiem ładowania a ładowaniem

17

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 loadjest 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.elponieważ obie wydają się wykonywać tę samą pracę?

Sibi
źródło
2
Jaka część dokumentacji na ten temat nie była jasna w tym względzie? Rozważyć zgłoszenie problemu doc, jeśli naprawdę uważasz, że jest jeden: M-x report-emacs-bug. Jak mówi @shosti i jak wyraźnie wskazuje dokument, load-filenie używa load-pathi nie dołącza sufiksów ”, dla dwóch ważnych różnic.
Drew
Zobacz także podręcznik Emacsa, węzeł Biblioteki Lisp .
Drew

Odpowiedzi:

14

Istnieje kilka sposobów ładowania plików Lisp w Emacsie:

  1. load-filepobiera literalną nazwę pliku (względną lub bezwzględną) i ładuje kod. Przykład:(load-file "/usr/local/share/site-lisp/foo.el")
  2. loadjest podobny load-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-pathkatalogi.
    Przykład: (load "foo")(jeśli „foo.el” znajduje się w bieżącym katalogu lub w ścieżce ładowania ”).
  3. load-libraryjest interaktywnym interfejsem dla load.
  4. requirejest podobny do load, z tym że zapobiega ładowaniu pliku więcej niż jeden raz (wymaga także odpowiedniej provideinstrukcji na końcu danego pliku). Przykład:(require 'foo)
shosti
źródło
3
Twój requireprzykład jest loadprzykładem. ;-)
Drew
W load-fileprzykładzie użyto load. :)
itsjeyd
2
Przykro mi powiedzieć, że 2 i 3 były błędne. :-) load nie zajrzeć do obciążenia ścieżce.
Malabarba,
@Malabarba Ups, masz rację, dziękuję za korektę. To bardziej mylące niż myślałem.
shosti
8

load-filei load-librarykomendami do użytku interaktywnego (gdzie główna różnica polega na początkowej treści monitu).

loadjest podstawową funkcją używaną podczas pisania Elisp (np. w .emacs).

Stefan
źródło