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?
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)))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With