Символ — это объект Lisp, который представляет один символ текста. В Emacs Lisp символы — это просто целые числа; то, является ли целое число символом или нет, определяется только тем, как оно используется. Подробности о представлении символов в Emacs см. в Коды символов.
Строка — это фиксированная последовательность символов. Это тип последовательности, называемый массивом, что означает, что ее длина фиксирована и не может быть изменена после создания (см. Последовательности, массивы и векторы). В отличие от C, строки Emacs Lisp не завершаются специальным кодом символа.
Поскольку строки являются массивами, а следовательно, и последовательностями, вы можете выполнять над ними операции с помощью общих функций для массивов и последовательностей, описанных в Последовательности, массивы и векторы. Например, вы можете получить доступ к отдельным символам в строке с помощью функции aref (см. Функции, работающие с массивами).
Существуют два текстовых представления для не-ASCII символов в строках Emacs (и в буферах): однобайтовое и многобайтовое. Для большинства задач Lisp-программирования вам не нужно беспокоиться об этих двух представлениях. Подробности см. в Текстовые представления.
Иногда последовательности клавиш представляются как однобайтовые строки. Когда однобайтовая строка является последовательностью клавиш, элементы строки в диапазоне от 128 до 255 представляют метасимволы (которые являются большими целыми числами), а не коды символов в диапазоне от 128 до 255. Строки не могут содержать символы с модификаторами hyper, super или alt; они могут содержать управляющие символы ASCII, но не другие управляющие символы. Они не различают регистр в управляющих символах ASCII. Если вы хотите сохранить такие символы в последовательности, например, в последовательности клавиш, вы должны использовать вектор вместо строки. Подробнее об этом можно узнать в Тип символа.
Строки полезны для хранения регулярных выражений. Вы также можете сопоставлять регулярные выражения со строками с помощью string-match (см. Поиск по регулярным выражениям). Функции match-string (см. Доступ к данным простого совпадения) и replace-match (см. Замена совпавшего текста) полезны для разложения и модификации строк после сопоставления регулярных выражений с ними.
Как и буфер, строка может содержать текстовые свойства для символов в ней, а также сами символы. См. Текстовые свойства. Все примитивы Lisp, которые копируют текст из строк в буферы или другие строки, также копируют свойства копируемых символов.
См. Текст для информации о функциях, отображающих строки или копирующих их в буферы. См. Тип символа и Тип строки для информации о синтаксисе символов и строк.
См. Не-ASCII символы для функций преобразования между текстовыми представлениями, а также для кодирования и декодирования кодов символов.
Также обратите внимание, что для вычисления ширины строки при отображении length не следует использовать; вместо этого используйте string-width (см. Размер отображаемого текста).