有没有办法找到专门针对给定类型的所有函数?
我想象你可以从(find-all-specializing-methods 'my-class)
这样的repl执行一些事情,它会返回一个方法列表,如(mypackage1:my-method-1 my-package2:my-method-2 etc.)
我认为必须有一种简单的方法可以做到这一点,因为MOP本身可能需要存储这样的列表来决定调用哪些方法。
答案 0 :(得分:5)
为了找到您可以查看slime-who-specializes
并了解如何进行设置。
按照定义,我到目前为止(对于SBCL):
#+#.(swank-backend::sbcl-with-xref-p)
(progn
(defmacro defxref (name &optional fn-name)
`(defimplementation ,name (what)
(sanitize-xrefs
(mapcar #'source-location-for-xref-data
(,(find-symbol (symbol-name (if fn-name
fn-name
name))
"SB-INTROSPECT")
what)))))
(defxref who-calls)
(defxref who-binds)
(defxref who-sets)
(defxref who-references)
(defxref who-macroexpands)
#+#.(swank-backend:with-symbol 'who-specializes-directly 'sb-introspect)
(defxref who-specializes who-specializes-directly))
此功能是针对不同的Lisp单独实现的,因此如果您需要特定的详细信息,则需要查看:swank-<your lisp>.lisp
文件并搜索who-specializes
泛型函数的实现。