Пример 10.9. Определение приоритета


(defmethod foo ((?a MULTIFIELD STRING))) ; #1
(defmethod foo ((?a LEXEME))) ; #2

Порядок методов из примера 10.9 будет следующим: #2, #1. Такой порядок определяется тем фактом, что классы первой пары ограничений типов — multifield/iexeme — не связаны, а метод #2 имеет более короткий список классов.

 

Пример 10.10. Определение приоритета

(defmethod foo ((la INTEGER LEXEME))) ; #1

(defmethod foo ((la STRING NUMBER))) ; #2

 

В данном примере обе пары классов (integer/string и lexeme /number) не связаны. Кроме того, списки классов ограничений имеют одинаковую дли­ну. Таким образом, приоритет будет установлен по порядку создания сле­дующих методов: #1, #2.

Скрытые методы

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

Однако с помощью функций call-next-method и override-next-method метод родовой функции может вызвать некоторый другой метод данной родовой функции (скрыть вызов). Такой подход называется императивным методом (после вызова некоторого метода он играет роль родового связывания).

Не рекомендуется использовать данный подход без крайней необходимости. В большинстве случаев обработку вызова с заданным набором аргументов должен осуществлять только один метод.

Помимо функций call-next-method и override-next-method для реализации императивного подхода можно использовать функцию call-specific-method для перегрузки установленного приоритета метода (см. гл. 15).

Ошибки выполнения метода

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

Если не был найден метод, применимый к конкретному вызову родовой функции, то такая ситуация расценивается как ошибка выполнения метода.

Значение, возвращаемое родовой функцией

Значение, возвращаемое родовой функцией, является значением, возвра­щаемым применимым методом с наивысшим приоритетом. Каждый приме­нимый метод может игнорировать или использовать значение, возвращае­мое всеми скрытыми методами. Значение, возвращаемое методом, является последним действием, вычисленным в действиях данного метода.



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


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

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

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

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