Common lisp 如何删除结构的defmethod
我有两个毁灭:Common lisp 如何删除结构的defmethod,common-lisp,Common Lisp,我有两个毁灭:monster&orc。orc包括monster。通用怪物上有名为monster show&monster hit的通用解除方法。orc有一个专门的怪物命中,但仍然保留了一般的怪物表演。我的问题是,我不小心将orc的专用方法命名为错误的名称(monster show),因此现在当我尝试使用泛型monster show时,它会运行它不应该运行的代码(我编译的错误命名的defmethod),而不是运行泛型方法 有没有办法摆脱Slime+SBCL中的一种专门的解除方法?在spacemac
monster
&orc
。orc
包括monster
。通用怪物上有名为monster show
&monster hit
的通用解除方法。orc
有一个专门的怪物命中
,但仍然保留了一般的怪物表演
。我的问题是,我不小心将orc
的专用方法命名为错误的名称(monster show
),因此现在当我尝试使用泛型monster show
时,它会运行它不应该运行的代码(我编译的错误命名的defmethod),而不是运行泛型方法
有没有办法摆脱Slime+SBCL中的一种专门的解除方法?在spacemacs上,使用邪恶模式
:Slime inspect RET#'monster-show
。在orc
上选择移除方法,下面是我使用粘液检查器的方法:
输入要修改的常规函数:
CL-USER> #'monster-show
#<GENERIC FUNCTION: MONSTER-SHOW>
CL-USER>#“怪物秀”
#
将光标移到该对象上,然后通过键入C-C-v选项卡来检查该对象
检查员应展示其专业人员确定的功能方法列表。导航到一个并按下按钮以删除/取消绑定该方法。你也可以点击这个
此外,通过对层次结构的描述,使用真正的类而不是结构可能更明智。与类相比,结构不会提供特别大的加速。如果您没有IDE或类似的,可以使用:
我在评论中添加了M-x路线,然后我将接受您的回答M-x粘液检查RET#怪物秀
。谢谢
(remove-method #'monster-show
(find-method #'monster-show
()
(list (find-class 'orc))))