如何在普通的lisp中获取类的所有实例?

tsi*_*kov 0 common-lisp clos

想象一下我有一节课:

(defclass person () ())
Run Code Online (Sandbox Code Playgroud)

然后我做了一些实例:

(setf anna (make-instance 'person))    
(setf lisa (make-instance 'person))    
Run Code Online (Sandbox Code Playgroud)

如何获取对象本身或分配给它们的符号名称?

我希望能够说出类似的(find-instances 'person)东西,(anna lisa)或者至少得到类似的东西(#<PERSON {100700E793}> #<PERSON {100700E793}>).

我搜索的是相当于ruby中的each_object.

我非常希望能够在没有外部库的情况下完成它.

Rai*_*wig 6

在Common Lisp中没有内置的东西.

录制实例

为了查找类的所有实例,通常会使类在实例创建时记录实例.人们可以想象出各种机制.有时人们仍然希望实例被垃圾收集 - 然后需要某种非标准的弱数据结构来实现.我希望,有一些库可以为CLOS实例实现类似的功能.

迭代包的符号

如果你想知道其中的一些或全部包的符号CLOS实例作为一个值,你可以在它们之间迭代(DO-SYMBOLS,DO-ALL-SYMBOLS,...),并检查是否有符号值,并且如果该符号值的一个实例某些班级.