Пример 11.40. Обработчики сообщений my-message классов user и object

(defmessage-handler USER my-message around ()

(call-next-handler))

(defmessage-handler USER my-message before ())

(defmessage-handler USER my-message ()

(call-next-handler))

(defmessage-handler USER my-message after ())

(defmessage-handler OBJECT my-message around ()

(call-next-handler))

(defmessage-handler OBJECT my-message before ())

(defmessage-handler OBJECT my-message ())

(defmessage-handler OBJECT my-message after ())

Диаграмма, приведенная на рис. 11.20, иллюстрирует порядок выполнения обработчиков, связанных с классами user и object, при посылке сообщения my-message объекту класса наследника user. Скобки показывают место нача­ла и конца работы отдельного обработчика. Обработчики, находящиеся внутри скобок другого обработчика, являются скрытыми.

Если во время выполнения обработчика происходит ошибка, любой теку­щий выполняемый обработчик прерывается, обработчики, которые еще не начали выполнение, игнорируются, и функция send возвращает значение FALSE.

Если для пословного сообщения нет применимого обработчика primary или при вызове обработчика было передано неверное число параметров, CLIPS сгенерирует сообщение об ошибке и прервет выполнение программы.

Рис.11.20. Последовательность выполнения обработчиков сообщений my-message, связанных с классами USER и OBJECT

Возвращаемое функцией send значение — это значение, полученное от наиболее определенного обработчика around или наиболее определенного обра­ботчика primary, если обработчика around нет. Значение, возвращаемое об­работчиком, является результатом вычисления последнего действия в этом обработчике.

Значения, возвращаемые обработчиками before и after, игнорируются. Эти обработчики применяются только для выполнения дополнительных полез­ных действий. Обработчик around может выбирать игнорировать или ис­пользовать значения, полученные от менее определенных обработчиков around или primary. Обработчик primary может выбирать игнорировать или использовать значения, полученные от менее определенных обработчиков primary.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: