Пример 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.

Работа с объектами

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



Дата добавления: 2021-12-14; просмотров: 202;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.