Spec-Zone.ru › Elisp

Компоненты символов

Каждый символ имеет четыре компонента (или «ячейки»), каждый из которых ссылается на другой объект:

Имя для печати

Имя символа.

Значение

Текущее значение символа как переменной.

Функция

Определение функции символа. Оно также может содержать символ, карту клавиш или макрос клавиатуры.

Список свойств

Список свойств символа.

Ячейка с именем для печати всегда содержит строку и не может быть изменена. Каждая из трех других ячеек может быть установлена на любой объект Lisp.

Ячейка с именем для печати содержит строку, являющуюся именем символа. Поскольку символы представляются текстово своими именами, важно, чтобы не было двух символов с одинаковым именем. Читатель Lisp гарантирует это: каждый раз при чтении символа он ищет существующий символ с указанным именем, прежде чем создать новый. Чтобы получить имя символа, используйте функцию symbol-name (см. Создание символов). Однако, хотя каждый символ имеет только одно уникальное имя для печати, тем не менее, на этот же символ можно ссылаться с помощью различных псевдонимов, называемых «сокращениями» (см. Сокращения).

Ячейка со значением хранит значение символа как переменной, что вы получаете, если сам символ оценивается как выражение Lisp. См. Переменные для получения подробной информации о том, как устанавливаются и извлекаются значения, включая такие сложности, как локальные привязки и правила области видимости. Большинство символов могут иметь любой объект Lisp в качестве значения, но некоторые специальные символы имеют значения, которые нельзя изменить; к ним относятся nil и t, а также любой символ, имя которого начинается с «:» (эти символы называются ключевыми словами). См. Постоянные переменные.

Ячейка функции содержит определение функции символа. Часто мы говорим «функция foo», когда на самом деле подразумеваем функцию, хранящуюся в ячейке функции символа foo; мы делаем это различие явным только при необходимости. Как правило, ячейка функции используется для хранения функции (см. Функции) или макроса (см. Макросы). Однако она также может использоваться для хранения символа (см. Непрямая передача функций), макроса клавиатуры (см. Макросы клавиатуры), карты клавиш (см. Карты клавиш) или объекта загрузки по запросу (см. Автозагрузка). Чтобы получить содержимое ячейки функции символа, используйте функцию symbol-function (см. Ячейки функций).

Ячейка списка свойств обычно должна содержать правильно отформатированный список свойств. Чтобы получить список свойств символа, используйте функцию symbol-plist. См. Свойства символов.

Ячейка функции или ячейка значения может быть пустой, что означает, что ячейка не ссылается ни на какой объект. (Это не то же самое, что хранить символ void, ни то же самое, что хранить символ nil.) Проверка пустой ячейки функции или значения приводит к ошибке, например, «Значение символа как переменной пусто».

Поскольку у каждого символа есть отдельные ячейки значения и функции, имена переменных и имена функций не конфликтуют. Например, символ buffer-file-name имеет значение (имя посещаемого файла в текущем буфере) и определение функции (примитивная функция, возвращающая имя файла):

buffer-file-name
     ⇒ "/gnu/elisp/symbols.texi"
(symbol-function 'buffer-file-name)
     ⇒ #<subr buffer-file-name>

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Symbol-Components.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API