Spec-Zone.ru › Elisp

Тип символа

Символ в GNU Emacs Lisp — это объект с именем. Имя символа служит печатным представлением символа. В обычном использовании Lisp, с одним единственным массивом общих объектов (см. Создание символов), имя символа уникально — нет двух символов с одинаковым именем.

Символ может служить переменной, именем функции или для хранения списка свойств. Или он может служить только для отличия от всех других объектов Lisp, чтобы его присутствие в структуре данных можно было надёжно распознать. В данном контексте, обычно предполагается только одно из этих применений. Но вы можете использовать один символ всеми этими способами, независимо.

Символ, имя которого начинается с двоеточия («:»), называется ключевым символом. Эти символы автоматически действуют как константы и обычно используются только для сравнения неизвестного символа с несколькими конкретными альтернативами. См. Постоянные переменные.

Имя символа может содержать любые символы. Большинство имён символов пишутся с буквами, цифрами и знаками препинания «-+=*/». Такие имена не требуют специальных знаков препинания; символы имени достаточно, пока имя не выглядит как число. (Если оно выглядит как число, напишите «\» в начале имени, чтобы принудительно интерпретировать его как символ.) Символы «_~!@$%^&:<>{}?» используются реже, но также не требуют специальных знаков препинания. Любые другие символы могут быть включены в имя символа, экранируя их обратной косой чертой. Однако в отличие от его использования в строках, обратная косая черта в имени символа просто цитирует одиночный символ, который следует за обратной косой чертой. Например, в строке «\t» представляет символ табуляции; в имени символа, однако, «\t» просто цитирует букву «t». Чтобы иметь символ с символом табуляции в его имени, вам нужно фактически использовать табуляцию (предшествующую обратной косой чертой). Но такое случается редко.

Примечание для Common Lisp: В Common Lisp строчные буквы всегда преобразуются в прописные, если они не экранированы явно. В Emacs Lisp прописные и строчные буквы различаются.

Ниже приведены несколько примеров имён символов. Обратите внимание, что «+» в четвёртом примере экранирован, чтобы предотвратить его чтение как число. Это не требуется в шестом примере, потому что остальная часть имени делает его невалидным как число.

foo                 ; A symbol named ‘foo’.
FOO                 ; A symbol named ‘FOO’, different from ‘foo’.
1+                  ; A symbol named ‘1+’
                    ;   (not ‘+1’, which is an integer).
\+1                 ; A symbol named ‘+1’
                    ;   (not a very readable name).
\(*\ 1\ 2\)         ; A symbol named ‘(* 1 2)’ (a worse name).
+-*/_~!@$%^&=:<>{}  ; A symbol named ‘+-*/_~!@$%^&=:<>{}’.
                    ;   These characters need not be escaped.

Исключение из правила, что имя символа служит его печатным представлением, «##» — печатное представление интернированного символа, имя которого — пустая строка. Кроме того, «#:foo» — печатное представление неинтернированного символа, имя которого — foo. (Обычно читатель Lisp интернирует все символы; см. Создание символов.)

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-Type.html

Spec-Zone.ru

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