2

ジェネリック関数slot-definition-readersは、 でなければならない引数を取得します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 に答える