【发布时间】:2019-12-05 19:14:03
【问题描述】:
如何取消定义cl-defmethods 我为cl-defgenerics 定义的,而不需要重新启动emacs?
例如,给定这些
(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,而不是先通过当前的major-mode专门的方法?
【问题讨论】:
-
看起来你不能以任何简单的方式。一个可怕的解决方法是重新定义方法以简单地执行
(call-next-method)。 -
@tfb 聪明的黑客,谢谢!