Советы по надежному определению переменных
Если вы определяете переменную, значением которой является функция или список функций, используйте имя, оканчивающееся соответственно на ‘-function’ или ‘-functions’.
Существуют и другие соглашения об именах переменных; ниже приведен полный список:
- ‘…-hook’
-
Переменная является обычным хуком (см. раздел Хуки).
- ‘…-function’
-
Значением является функция.
- ‘…-functions’
-
Значением является список функций.
- ‘…-form’
-
Значением является форма (выражение).
- ‘…-forms’
-
Значением является список форм (выражений).
- ‘…-predicate’
-
Значением является предикат — функция с одним аргументом, которая возвращает
nilв случае успеха иnilв случае неудачи. - ‘…-flag’
-
Значение переменной имеет значение только в том, равно ли оно
nil. Поскольку со временем такие переменные часто начинают принимать и другие значения, это соглашение не рекомендуется. - ‘…-program’
-
Значением является имя программы.
- ‘…-command’
-
Значением является полная команда оболочки.
- ‘…-switches’
-
Значение задает параметры команды.
- ‘prefix--…’
-
Переменная предназначена для внутреннего использования и определена в файле prefix.el. (Код Emacs, внесенный до 2018 года, может следовать другим соглашениям, от которых постепенно отказываются.)
- ‘…-internal’
Переменная предназначена для внутреннего использования и определена в коде на C. (Код Emacs, внесенный до 2018 года, может следовать другим соглашениям, от которых постепенно отказываются.)
Определяя переменную, всегда учитывайте, следует ли пометить ее как безопасную или потенциально опасную; см. раздел Локальные переменные файла.
При определении и инициализации переменной, хранящей сложное значение (например, таблицу синтаксиса для основного режима), лучше поместить вычисление всего значения в defvar, например:
(defvar my-major-mode-syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?# "<" table)
...
table)
docstring)
У этого способа есть несколько преимуществ. Во-первых, если пользователь прервет загрузку файла, переменная либо останется неинициализированной, либо будет инициализирована корректно — промежуточного состояния не возникнет. Если она останется неинициализированной, повторная загрузка файла корректно ее инициализирует. Во-вторых, повторная загрузка файла после инициализации переменной не изменит ее; это важно, если пользователь изменил ее значение. В-третьих, вычисление формы defvar с помощью C-M-x полностью переинициализирует переменную.
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/Tips-for-Defining.html