Разница между загрузочным файлом и загрузкой

17

Я просмотрел документацию по обеим функциям, но, похоже, они не пролили много информации. В чем же разница между ними, кроме того факта, что loadэто встроенная функция в исходном коде C, тогда как load-file - это скомпилированная функция интерактивного списка.

Какова рекомендуемая функция для использования, init.elпоскольку обе они, кажется, выполняют одну и ту же работу?

Сиби
источник
2
Какая часть документации для этого не была ясна в этом отношении? Рассмотрим сообщение о проблеме DOC, если вы действительно думаете , есть один: M-x report-emacs-bug. Как говорит @shosti, и как ясно указывает документ, load-file« не использует load-pathи не добавляет суффиксы » для двух важных отличий.
Дрю
Смотрите также руководство по Emacs, ноды Lisp Libraries .
Дрю

Ответы:

14

Есть несколько способов загрузить файлы Lisp в Emacs:

  1. load-fileберет буквальное имя файла (относительное или абсолютное) и загружает код. Пример:(load-file "/usr/local/share/site-lisp/foo.el")
  2. loadпохоже load-file, за исключением того, что он более гибкий - вы можете опустить расширение, и оно автоматически загрузит файл "elc" или "el" в зависимости от ситуации.
    Это также смотрит в load-pathкаталоги.
    Пример: (load "foo")(если "foo.el" находится в текущем каталоге или в пути загрузки ").
  3. load-libraryэто интерактивный интерфейс для load.
  4. requireаналогично load, за исключением того, что предотвращает загрузку файла более одного раза (также требуется соответствующий provideоператор в конце рассматриваемого файла). Пример:(require 'foo)
shosti
источник
3
Ваш requireпример является loadпримером. ;-)
Дрю
load-fileПример использует load. :)
itjeyd
2
Извините, что 2 и 3 были неправы. :-) load делает экскурс в грузоподъемного пути.
Малабарба
@ Malabarba Ой, вы правы, спасибо за исправление. Это более запутанно, чем я думал.
Шости
8

load-fileи load-libraryявляются командами для интерактивного использования (где основное отличие заключается в начальном содержании приглашения).

loadявляется базовой функцией, используемой при написании Elisp (например, в вашем .emacs).

Стефан
источник