Какова цель функции Emacs (оценка-и-компиляция …)?

Я могу прочитать документацию, таким образом, я не прошу вырезание и вклейку этого.

Я пытаюсь понять мотивацию для этой функции.

Когда я хотел бы использовать его?

9
задан DavidRR 22 July 2015 в 12:22
поделиться

1 ответ

В документации в руководстве по Emacs lisp действительно есть несколько примеров ситуаций, которые, похоже, отвечают на ваш вопрос (в отличие от строки doc).

Судя по исходному коду Emacs, eval-and-compile используется для того, чтобы успокоить компилятор, сделать макросы/функции доступными во время компиляции (и оценки) или сделать доступными во время компиляции специфические для конкретной функции/версии варианты макросов/функций.

Одно из применений, которое я нашел полезным увидеть, было в ezimage.el. Там оператор if был помещен внутрь eval-and-compile для условного определения макросов в зависимости от того, был ли пакет скомпилирован/вычислен в Emacs или XEmacs, а также от наличия определенной функции. Обернув это условие внутри eval-and-compile, вы включите соответствующее использование макросов во время компиляции. Аналогичную ситуацию можно найти в mwheel.el.

Аналогично, если вы хотите определить функцию через fset и сделать ее доступной во время компиляции, вам нужно, чтобы вызов fset был обернут eval-and-compile, потому что иначе ассоциация символ -> функция не будет доступна, пока файл не будет оценен (потому что компиляция вызова fset только оптимизирует присваивание, но не do присваивание). Зачем нужно это присваивание во время компиляции? Чтобы успокоить компилятор. Примечание: это просто моя переформулировка того, что есть в документации по elisp.

Я заметил много случаев использования в коде Emacs, которые просто обертывали вызовы require, что звучит излишне, когда вы читаете документацию. Я в растерянности, как это объяснить.

9
ответ дан 4 December 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: