如何在 Common Lisp 中获取 class 信息?

How to get class information in Common Lisp?

例如,我想从 REPL 查看一个插槽的可用访问器列表,而不是跳转到源代码。我怎么做?

不确定是否有办法轻松获取 accessor 的列表。对象检查函数倾向于从特定于实现的包中导出。您可以查看 package file of cl-mop 以了解它们的位置。相关行是

...
 (:shadowing-import-from
  #+openmcl-native-threads #:ccl
  #+cmu #:pcl
  #+sbcl #:sb-pcl
  #+lispworks #:hcl
  #+allegro #:mop
  #+clisp #:clos
  #:class-slots #:slot-definition-name)
...

该项目还导出了 slot-names and to-alist 方法,它们的功能与它们听起来完全一样。

如果您在 slime,而不是普通的命令行 REPL,您可以使用 slime-inspect。如果你用它来检查 class,你会看到(除其他外)专门处理它的方法列表(你需要用这种方式检查 class,所以如果你有一个实例,你需要先调用 class-of