Из того, что я понимаю require
, используется для загрузки больших кусков кода (что-то вроде модулей), хотя он также может загружать отдельные функции.
Автозагрузка с другой стороны, только регистрирует функции и откладывает загрузку до времени выполнения.
Я недавно прочитал статью, которая защищает использование autoload
исключительно.
Это лучше autoload
чем чем require
? Каковы некоторые типичные случаи использования для каждого из них?
autoload
иrequire
из этого вопроса. Добавление тэгаlibraries
было в порядке, но теперь любой, кто ищет, использует тэги для вопросовautoload
илиrequire
не найдет этот. Это обе важные функции Emacs-Lisp, которые люди будут искать. Очень плохо. И подумайте, насколько полезнымиelisp
иlibraries
(особенноelisp
) они будут на практике для сайта Emacs: боюсь, в Emacsland они мало чем отличаются. (Но нет, я не против иметь их и использовать их.)autoload
иrequire
я думаю, что эти теги оправданы. На самом деле, маркировка этого вопроса [только] с помощьюlibraries
чрезмерного обобщения. Я, например,require
запускаю загрузку «my-foobar-cfg», которая, как следует из названия, содержит только мою конфигурацию, а не библиотеку.Ответы:
autoload
не является заменойrequire
. Обычноrequire
используется, чтобы убедиться, что определенный файл загружен.autoload
с другой стороны, Emacs дает подсказку, в каком файле найти данную функцию, не загружая файл сразу. Только когда вызывается функция автозагрузки, загружается соответствующий файл.В основном
autoload
вы можете отложить загрузку всего файла до того момента, когда он вам действительно понадобится. Вот почему (особенно большие) пакеты обычно определяют свои функции входа какautoload
s.Если вы хотите сделать тяжелые настройки для пакета, как правило, вам не повезло
autoload
. Если вы все еще хотите избежатьrequire
этого, вы можете отложить свои настройки до тех пор, пока файл не будет загружен с помощьюeval-after-load
.Руководство по Emacs охватывает эту тему в следующих разделах:
источник
autoload
это (более или менее) о предоставлении определений команд, так что вы можете использовать эти команды.require
о том, чтобы сделать все доступное в библиотеке (и в библиотеках, которые требует библиотека, рекурсивно) доступным. Emacs - это больше, чем команды. (Но да, конечно, после запуска автозагрузки команды загружается вся ее библиотека.)С точки зрения инициализации Emacs, не делайте выбор. У пользователя GitHub jwiegley есть превосходный макрос объявления use-package , который потребует или автоматически загрузит пакет в зависимости от необходимости. Лучше всего использовать для отсрочки загрузки пакетов, которые могут быть загружены по требованию.
источник
Если вы хотите, чтобы определенная функция загружалась и была доступна непосредственно при запуске Emacs, используйте require, в противном случае используйте автозагрузку. Я лично очень ценю время запуска (фактически я перезагружаю Emacs пару раз в неделю, иногда несколько раз в день), поэтому я согласен, что потребуется некоторое время, когда Emacs автоматически загрузит определенную функцию, когда она мне понадобится. Итак, подумайте, что вы хотите сделать доступным сразу после запуска Emacs, и что можно загрузить при необходимости.
источник