Есть ли способ собрать читателей определения слотов из всего дерева наследования?

common-lisp clos mop

204 просмотра

1 ответ

2903 Репутация автора

Универсальная функция slot-definition-readersполучает аргумент, который должен быть direct-slot-definition. Если объект является экземпляром класса, который наследуется от другого класса, как я могу получить читателей всех эффективных слотов объекта? Должен ли я вручную обходить дерево и вызывать slot-definition-readersрезультаты class-direct-slotsв каждом суперклассе, собирая результаты, или есть другой способ, о котором я не знаю?

Автор: Paralife Источник Размещён: 19.07.2016 07:43

Ответы (1)


2 плюса

26272 Репутация автора

Решение

Этот ответ "сообщества вики" предназначен для реализации этой функции. В последующем не используется деструктивная операция (NCONC, MAPCAN), поскольку реализация может вернуть внутренний список без его копирования. MAPPEND импортируется из Alexandria , а операции СС могут быть импортирована из более близкой-швабры .

(defun all-direct-slots (class)
  (append (class-direct-slots class)
          (mappend #'all-direct-slots
                   (class-direct-superclasses class))))

(defun all-slot-readers (class)
  (mappend #'slot-definition-readers
           (all-direct-slots class)))
Автор: coredump Размещён: 20.07.2016 06:34
Вопросы из категории :
32x32