Спецификаторы типов
Спецификатор типа — это выражение, обозначающее тип. Тип представляет собой множество возможных значений. Спецификаторы типов делятся на примитивные и составные типы.
Спецификаторы типов используются для различных целей, в том числе для документирования интерфейсов функций с помощью объявлений (см. Форма declare), указания типов слотов структур (см. Структуры в Расширениях Common Lisp для GNU Emacs Lisp), проверки типов с помощью cl-the (см. Объявления в Расширениях Common Lisp для GNU Emacs Lisp), а также помощи нативному компилятору (см. Компиляция Lisp в машинный код) при оптимизации генерации кода и выводе сигнатур функций.
- Примитивные спецификаторы типов
-
Примитивные спецификаторы типов — это базовые типы (то есть не составленные из других спецификаторов типов).
Встроенные примитивные типы (такие как
integer,float,stringи т. д.) перечислены в разделе Иерархия типов объектов Emacs Lisp. - Составные спецификаторы типов
-
Составные типы предназначены для определения более сложных или точных спецификаций типов посредством объединения или изменения более простых типов.
Список составных спецификаторов типов:
(or type-1 … type-n)-
Спецификатор типа
orописывает тип, которому соответствует хотя бы один из указанных типов. (and type-1 … type-n)-
Аналогично, спецификатор типа
andописывает тип, которому соответствуют все указанные типы. (not type)-
Спецификатор типа
notопределяет любой тип, кроме указанного. (member value-1 … value-n)-
Спецификатор типа
memberпозволяет указать тип, включающий только явно перечисленные значения. -
(function (arg-1-type … arg-n-type) return-type) -
Спецификатор типа
functionиспользуется для описания типов аргументов и возвращаемого значения функции. Типы аргументов можно чередовать с символами&optionalи&rest, чтобы сопоставить их с аргументами функции (см. Особенности списков аргументов).Следующий спецификатор типа представляет функцию, у которой первый параметр имеет тип
symbol, второй необязательный параметр — типfloat, а возвращаемое значение имеет типinteger:(function (symbol &optional float) integer)
(integer lower-bound upper-bound)-
Спецификатор типа
integerтакже можно использовать как составной спецификатор типа для определения подмножества целых значений с помощью задания диапазона. Это позволяет точно указать, какие целые числа допустимы для данного типа.lower-bound — минимальное целое значение в диапазоне, а upper-bound — максимальное. Вместо нижней или верхней границы можно использовать
*, чтобы указать отсутствие ограничения.Следующий пример представляет все целые числа от -10 до 10:
(integer -10 10)
Следующий пример представляет единственное значение 10:
(integer 10 10)
Следующий пример представляет все целые числа от минус бесконечности до 10:
(integer * 10)
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/Type-Specifiers.html