Spec-Zone.ru › Elisp

Сохранение и восстановление данных соответствия

При вызове функции, которая может производить поиск, вам может потребоваться сохранить и восстановить данные соответствия вокруг этого вызова, если вы хотите сохранить данные соответствия из предыдущего поиска для последующего использования. Вот пример, демонстрирующий проблему, которая возникает, если вы не сохраняете данные соответствия:

(re-search-forward "The \\(cat \\)")
     ⇒ 48
(foo)                   ; foo does more searching.
(match-end 0)
     ⇒ 61              ; Unexpected result—not 48!

Вы можете сохранить и восстановить данные соответствия с помощью save-match-data:

Макрос: save-match-data тело…

Этот макрос выполняет тело, сохраняя и восстанавливая данные соответствия вокруг него. Значение возврата — значение последней формы в тело.

Вы можете использовать set-match-data вместе с match-data для имитации эффекта специальной формы save-match-data. Вот как:

(let ((data (match-data)))
  (unwind-protect
      …   ; Ok to change the original match data.
    (set-match-data data)))

Emacs автоматически сохраняет и восстанавливает данные соответствия при выполнении функций фильтрации процессов (см. Функции фильтрации) и стражей процессов (см. Стражи).

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/Saving-Match-Data.html

Spec-Zone.ru

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