Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Определение 15.66, Функция next-methodp
(next-methodp)
Если функция next-methodp дала положительный результат, то обнаруженный скрытый метод родовой функции можно вызвать при помощи функции call-next-method. Скрытому методу передается тот же набор аргументов, что и вызывающему его методу родовой функции. Метод может продолжать свою работу и после вызова функции call-next-method. Кроме того, возможен множественный вызов скрытых методов родовой функции. Для этого нужно использовать функцию call-next-method необходимое число раз. Результатом работы данной функции служит результат вызванного скрытого метода или значение FALSE в случае ошибки (см. рис. 15.23).
Пример 15.26. Использование функции call-next-method
(defmethod describe ((? a INTEGER)) (if (next-methodp) then (bind? extension (str-cat " " (call-next-method))) else (bind? extension " ")) (str-cat " INTEGER"? extension)) (describe 3) (defmethod describe ((? a NUMBER)) " NUMBER") (describe 3) (describe 3.0)
Функция call-next-handler подобна функции call-next-method и предназначена для вызова скрытых обработчиков сообщений объектов, определенных пользователем классов. Определение функции call-next-handler приведено ниже.
Определение 15.67. Функция call-next-handler
(call-next-handler)
Для изменения набора аргументов при вызове скрытого метода родовой функции служит функция override-next-method. В остальном она подобна предыдущей.
Рис. 15.23. Использование функции call-next-method
|