Выбор диалекта Lisp
При загрузке файла Emacs Lisp или вычислении буфера Lisp диалект выбирается с помощью локальной для буфера переменной lexical-binding.
- Переменная: lexical-binding
Если значение этой локальной для буфера переменной не равно
nil, файлы и буферы Emacs Lisp вычисляются с использованием современного диалекта Lisp, в котором по умолчанию применяется лексическая, а не динамическая область видимости. Еслиnil, используется старый диалект, в котором для всех локальных переменных применяется динамическая область видимости. Обычно эту переменную задают для всего файла Emacs Lisp как переменную, локальную для файла (см. Переменные, локальные для файла). Обратите внимание, что, в отличие от других подобных переменных, эту необходимо задавать в первой строке файла.
На практике выбор диалекта означает, что первая строка файла Emacs Lisp выглядит так:
;;; ... -*- lexical-binding: t -*-
для современного диалекта с лексической областью видимости и так:
;;; ... -*- lexical-binding: nil -*-
для старого диалекта только с динамической областью видимости. Если объявление отсутствует, используется старый диалект, но в будущем это может измениться. Компилятор выдаст предупреждение, если объявление отсутствует.
При непосредственном вычислении кода Emacs Lisp с помощью вызова eval лексическая область видимости включается, если аргумент lexical функции eval не равен nil. См. Вычисление.
Лексическая область видимости также включена в режимах Lisp Interaction и IELM, используемых в буферах *scratch* и *ielm*, а также при вычислении выражений с помощью M-: (eval-expression), при обработке параметров командной строки Emacs --eval, -x и --script (см. Аргументы действий в Руководстве GNU Emacs), а также при обработке параметра командной строки --eval программы emacsclient (см. Параметры emacsclient в Руководстве GNU Emacs).
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Selecting-Lisp-Dialect.html