The generic function slot-definition-readers
gets an argument that must be a direct-slot-definition
. If an object is an instance of a class that inherits from another class how can I get hold of the readers of all the effective-slots of the object? Do I manually have to traverse the tree and call slot-definition-readers
on the result of class-direct-slots
in each superclass, gathering the results, or is there another way that I am not aware of?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
This "community wiki" answer is here to provide an implementation of this feature. What follows uses no destructive operation (NCONC, MAPCAN) since an implementation might return an internal list without copying it. MAPPEND is imported from alexandria, and MOP operations can be imported from closer-mop.
(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)))