Я пробовал наследование, но потерпел неудачу разными способами.Я только использовал CLOS короткое время.Таким образом, мне трудно определить, где находится спектр ...
Не волнуйтесь, прыгнуть прямо к метаобъектам с небольшим опытом работы с CLOS, безусловно, сложно, я рекомендую прочитать «Искусство протокола метаобъектов», (также известный как «AMOP» (Грегор Кичалес и Джим Де Ривьер).Существует HTML-версия глав 5 и 6 Роберта Странда (Robert Strandh) по адресу http://metamodular.com/CLOS-MOP.
. Вы хотите определить гибридный метакласс, который наследуется от обоих метаклассов.
(defclass hybrid-metaclass (mito:dao-table-class
weblocks:widget-class)
())
Если вы определитекласс с указанным выше метаклассом, у вас будет это предупреждение:
;; WARNING: #<HYBRID-METACLASS COMMON-LISP-USER::MY-WIDGET {100B8FE683}> is not
;; defined to be a subclass of WEBLOCKS:WIDGET; consider adding WEBLOCKS:WIDGET
;; or a subclass thereof to the superclass list
Метакласс widget-class
ожидает, что все его классы наследуются от базового класса, weblocks:widget
.
ДавайтеОпределите такой базовый объект для нашего гибридного метакласса:
(defclass hybrid-widget (weblocks:widget) ()
(:metaclass hybrid-metaclass))
Здесь hybrid-widget
наследуется от weblocks:widget
и имеет для метакласса hybrid-metaclass
.Все ваши виджеты должны наследоваться от этого класса и иметь метакласс hybrid-metaclass
(не стесняйтесь, чтобы найти лучшее имя).