在开发过程中,我定义了一个“initialize-instance :after”方法,一段时间后不再需要它,实际上妨碍了我的工作,因为它内部调用了不再有效的代码。由于该unintern
函数没有限定符的参数,有什么方法可以“取消实习”一个方法的符号限定符组合,这样我就不必重新启动inferior-lisp并再次加载项目开始?
问问题
1119 次
3 回答
16
您可以使用标准功能find-method
并remove-method
执行此操作:
(remove-method (find-method #'frob '(:before) '(vehicle t)))
我发现使用粘液检查器要容易得多。如果您的函数名为frob
,您可以使用M-x slime-inspect #'frob RET
查看所有方法的列表frob
并选择要删除的单个方法。
于 2011-05-12T11:02:46.170 回答
5
请参阅 Xach 的答案。
方法收集在通用函数中。UNINTERN 与此无关。您想要的是从通用函数中删除一个方法。
大多数常见的 Lisp IDE 都有办法做到这一点。通过编辑器(Mx undefine ...)或通过一些检查器工具。
于 2011-05-12T11:29:21.493 回答
0
使用 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))))
我能够从http://www.gigamonkeys.com/book/object-reorientation-classes.html的脚注 7和查找方法的 Lisp HyperSpec 的示例中弄清楚这一点http://clhs.lisp.se /正文/f_find_m.htm。
于 2013-04-10T22:52:46.220 回答