Сохранение и восстановление данных соответствия
При вызове функции, которая может производить поиск, вам может потребоваться сохранить и восстановить данные соответствия вокруг этого вызова, если вы хотите сохранить данные соответствия из предыдущего поиска для последующего использования. Вот пример, демонстрирующий проблему, которая возникает, если вы не сохраняете данные соответствия:
(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