Generics 如何取消定义定义方法

Generics 如何取消定义定义方法,generics,lisp,elisp,Generics,Lisp,Elisp,如何在不需要重新启动emacs的情况下取消定义我为cl defgenerics定义的cl defmethods 例如,考虑到这些 (cl-defgeneric my-fun (n &optional _arg) n) (cl-defmethod my-fun ((n string)) (upcase n)) (cl-defmethod my-fun ((n integer)) (* n n)) (cl-defmethod my-fun (n &context (major-mod

如何在不需要重新启动emacs的情况下取消定义我为
cl defgeneric
s定义的
cl defmethod
s

例如,考虑到这些

(cl-defgeneric my-fun (n &optional _arg) n)
(cl-defmethod my-fun ((n string)) (upcase n))
(cl-defmethod my-fun ((n integer)) (* n n))
(cl-defmethod my-fun (n &context (major-mode emacs-lisp-mode))
  (if (evenp n) n (cl-call-next-method (/ n 2))))
如何以交互方式删除其中一个方法?例如,删除专门用于elisp缓冲区的方法,这样从elisp缓冲区调用
(my fun 9)
就可以了
在81中,不是先通过当前的
主要模式
专门化方法?

[这是一个注释,但我认为如果没有更好的答案,它可能算作一个答案。]


我认为使用
generic.el
很难做到这一点。然而,做一些功能上等价的事情的技巧是用一个简单的定义替换要“删除”的方法,该定义只说
(调用下一个方法)
。一旦你做到了这一点,那么这个方法在功能上就基本上不再存在了,除非它会让事情慢一点。

看起来你不可能用任何简单的方法。一个可怕的解决方法是重新定义方法,只需执行
(调用下一个方法)
@tfb smart hack,谢谢!