2

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

4

1 回答 1

2

这个“社区维基”答案在这里提供了这个功能的实现。下面的内容不使用破坏性操作(NCONC、MAPCAN),因为实现可能会返回一个内部列表而不复制它。MAPPEND是从alexandria导入的,MOP操作可以从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)))
于 2016-07-20T06:34:17.990 回答