Spec-Zone.ru › Elisp

Расширение pcase

Макрос pcase поддерживает несколько типов шаблонов (см. Сопоставление с шаблонами - условное). Вы можете добавить поддержку других типов шаблонов, используя макрос pcase-defmacro.

Макрос: pcase-defmacro name args [doc] &rest body

Определить новый тип шаблона для pcase, который вызывается как (name actual-args). Макрос pcase расширяет это в вызов функции, который оценивает body, задача которого – переписать вызванный шаблон в другой шаблон в среде, где args связаны с actual-args.

Кроме того, организовать отображение doc вместе со строкой документации pcase. По соглашению, doc должен использовать EXPVAL для обозначения результата оценки expression (первый аргумент для pcase) .

Как правило, body переписывает вызванный шаблон, используя более базовые шаблоны. Хотя все шаблоны в конечном итоге сводятся к базовым шаблонам, body не обязательно должны использовать базовые шаблоны сразу. Следующий пример определяет два шаблона с именами less-than и integer-less-than.

(pcase-defmacro less-than (n)
  "Matches if EXPVAL is a number less than N."
  `(pred (> ,n)))
(pcase-defmacro integer-less-than (n)
  "Matches if EXPVAL is an integer less than N."
  `(and (pred integerp)
        (less-than ,n)))

Обратите внимание, что строки документации упоминают args (в данном случае только один: n) обычным способом, а также упоминают EXPVAL по соглашению. Первая переработка (т. е., body для less-than) использует один базовый шаблон: pred. Вторая использует два базовых шаблона: and и pred, а также недавно определенный шаблон less-than. Оба используют один конструктор обратной кавычки (см. Обратная кавычка).

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/Extending-pcase.html

Spec-Zone.ru

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