如何删除结构的defmethod

时间:2018-01-18 12:23:28

标签: common-lisp

我有2个破坏:monster& orcorc包含monster。通用怪物上有通用的defmethods,名为monster-show& monster-hitorc有一个专门的monster-hit,但仍保留通用monster-show。我的问题是我不小心为orc错误的名称(monster-show)命名了专门的方法,所以现在当我尝试使用泛型monster-show时,它运行的代码应该是' t(我编译的错误命名的defmethod)而不是运行泛型方法。

有没有办法摆脱Slime + SBCL中的专门defmethod?

3 个答案:

答案 0 :(得分:4)

如果您没有IDE等,可以使用remove-method

(remove-method #'monster-show
               (find-method #'monster-show
                            ()
                            (list (find-class 'orc))))

答案 1 :(得分:3)

以下是我使用粘液检查员的方法:

输入您要修改的通用功能:

CL-USER> #'monster-show
#<GENERIC FUNCTION: MONSTER-SHOW>

将光标移到它上面,然后输入C-c C-v TAB

检查对象

检查员应显示其专业人员确定的功能方法列表。导航到一个,然后按按钮删除/取消绑定方法。你也可以点击这个。

同样通过对层次结构的描述,使用真正的类而不是结构可能更明智。与阶级相比,结构数量不会增加特别大的速度。

答案 2 :(得分:1)

在具有邪恶模式:slime-inspect RET #'monster-show的spacemacs上。在orc上选择remove-method。