gpt4 book ai didi

common-lisp - 查找专用于给定类型的所有方法

转载 作者:行者123 更新时间:2023-12-04 15:13:19 25 4
gpt4 key购买 nike

有没有办法找到专门针对给定类型的所有函数?

我设想你可以从 repl 中执行一些东西,比如 (find-all-specializing-methods 'my-class)它会返回一个方法列表,如 (mypackage1:my-method-1 my-package2:my-method-2 etc.)
我认为必须有一个简单的方法来做到这一点,因为 MOP 本身可能需要存储这样一个列表来决定调用哪些方法。

最佳答案

为了找到你可以查看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))

这个功能是针对不同的 Lisps 单独实现的,所以如果你需要特定的细节,你需要查看: swank-<your lisp>.lisp文件并搜索 who-specializes 的实现通用功能。

关于common-lisp - 查找专用于给定类型的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com