common lisp-有没有一种方法可以从所有继承树中收集槽定义读取器


泛型函数slot-definition-readers获取的参数必须是direct-slot-definition。如果一个对象是从另一个类继承的类的实例,我如何才能获得该对象所有有效槽的读取器?我是否必须手动遍历树并对每个超类中class-direct-slots的结果调用slot-definition-readers,以收集结果,或者是否有其他我不知道的方法?

这个"社区wiki"答案是为了提供此功能的实现。以下内容不使用破坏性操作(NCONC、MAPCAN(,因为实现可能会在不复制内部列表的情况下返回内部列表。MAPPEND是从alexandria导入的,MOP操作可以从更近的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)))

相关内容

  • 没有找到相关文章

最新更新