我有2个破坏:monster
& orc
。 orc
包含monster
。通用怪物上有通用的defmethods,名为monster-show
& monster-hit
。 orc
有一个专门的monster-hit
,但仍保留通用monster-show
。我的问题是我不小心为orc
错误的名称(monster-show
)命名了专门的方法,所以现在当我尝试使用泛型monster-show
时,它运行的代码应该是' t(我编译的错误命名的defmethod)而不是运行泛型方法。
有没有办法摆脱Slime + SBCL中的专门defmethod?
答案 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。