如何在不重新启动cl-defmethod的情况下取消定义为cl-defgeneric定义的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专用方法?
发布于 2019-12-06 18:45:52
这最初是一个评论,但我认为在没有更好的答案的情况下,它可能会被算作一个答案。
我认为使用generic.el很难做到这一点。然而,做一些功能等价的事情的一个诀窍是用一个简单的(call-next-method)定义替换你想要“移除”的方法。一旦你这样做了,那么这个方法在功能上就不再存在了,只是它会让事情变慢一点。
https://stackoverflow.com/questions/59201891
复制相似问题