Иногда полезно выполнить какие-либо действия, когда переменная меняет свое значение. Механизм точки наблюдения за переменной предоставляет средства для этого. Некоторые возможные области применения этой функции включают синхронизацию отображения с настройками переменных и вызов отладчика для отслеживания неожиданных изменений переменных (см. Вход в отладчик при изменении переменной).
Следующие функции могут использоваться для манипулирования и запроса функций наблюдения для переменной.
Эта функция обеспечивает вызов watch-function всякий раз, когда symbol изменяется. Изменения через псевдонимы (см. Псевдонимы переменных) будут иметь тот же эффект.
watch-function будет вызвана непосредственно перед изменением значения symbol с 4 аргументами: symbol, newval, operation и where. symbol — это изменяемая переменная. newval — это значение, на которое она будет изменена. (Старое значение доступно watch-function как значение symbol, поскольку оно еще не было изменено на newval.) operation — это символ, представляющий тип изменения, один из: set, let, unlet, makunbound или defvaralias. where — это буфер, если изменяется локальное значение переменной в буфере, иначе nil.
Эта функция удаляет watch-function из списка наблюдателей symbol.
Эта функция возвращает список активных функций наблюдения для symbol.
Существует несколько способов, которыми переменная может быть изменена (или по крайней мере показаться измененной) без срабатывания точки наблюдения.
Поскольку точки наблюдения привязаны к символам, изменение объектов, содержащихся в переменных (например, с помощью функции изменения списка см. Изменение существующей структуры списка), не отлавливается этим механизмом.
Кроме того, код на C может напрямую изменять значение переменных, обходя механизм точек наблюдения.
Небольшое ограничение этой функции, опять же из-за того, что она нацелена на символы, заключается в том, что можно наблюдать только за переменными динамической области видимости. Это не представляет большой проблемы, поскольку изменения лексических переменных легко обнаружить путем инспекции кода в области видимости переменной (в отличие от динамических переменных, которые могут быть изменены любым кодом, см. Правила области видимости при привязке переменных).