Lisp 我怎样才能找到一个合格的方法?

Lisp 我怎样才能找到一个合格的方法?,lisp,common-lisp,slime,Lisp,Common Lisp,Slime,在开发过程中,我定义了一个“initializeinstance:after”方法,该方法在一段时间后不再需要,实际上会妨碍我的工作,因为它调用的代码不再有效。由于untrn函数没有限定符的参数,是否有任何方法可以取消方法的符号限定符组合,从而不必重新启动lisp并从一开始就重新加载项目?您可以使用标准函数find方法和remove方法来执行此操作: (remove-method (find-method #'frob '(:before) '(vehicle t))) 我发现使用粘液检测仪要

在开发过程中,我定义了一个“initializeinstance:after”方法,该方法在一段时间后不再需要,实际上会妨碍我的工作,因为它调用的代码不再有效。由于untrn函数没有限定符的参数,是否有任何方法可以取消方法的符号限定符组合,从而不必重新启动lisp并从一开始就重新加载项目?

您可以使用标准函数find方法和remove方法来执行此操作:

(remove-method (find-method #'frob '(:before) '(vehicle t)))

我发现使用粘液检测仪要容易得多。如果您的函数名为frob,您可以使用M-x slime inspect“frob RET”查看frob上所有方法的列表,并选择要删除的单个方法。

请参阅Xach的答案

方法收集在泛型函数中。Untern与此无关。您想要的是从泛型函数中删除方法


大多数常见的LispIDE都有这样做的方法。或者通过编辑器M-x取消定义。。。或者通过AllegroCL 9.0的某些检查工具。

。Xach的回答对我来说并不完全有效

我的方法的定义:

defmethod my-method* ((expr forall-expr) bindings)
forall expr是一个类,绑定是非类型化的。要找到我必须使用的方法:

(find-method #'my-method* '() (mapcar #'find-class '(forall-expr t)))
然后删除我使用的方法的定义:

(remove-method #'my-method* (find-method #'my-method* '() (mapcar #'find-class '(forall-expr t))))

我可以从脚注7和Lisp HyperSpec for find方法的示例中找到这一点。

如果您希望使用slime inspect进行此类检查,请确保您的slime contribs中有slime fancy inspector。通用煤泥检查员至少目前不。。。使此类功能易于访问。