首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何取消定义defmethod

如何取消定义defmethod
EN

Stack Overflow用户
提问于 2019-12-06 03:14:03
回答 1查看 81关注 0票数 2

如何在不重新启动cl-defmethod的情况下取消定义为cl-defgeneric定义的emacs?

例如,给定以下内容

代码语言:javascript
复制
(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专用方法?

EN

回答 1

Stack Overflow用户

发布于 2019-12-06 18:45:52

这最初是一个评论,但我认为在没有更好的答案的情况下,它可能会被算作一个答案。

我认为使用generic.el很难做到这一点。然而,做一些功能等价的事情的一个诀窍是用一个简单的(call-next-method)定义替换你想要“移除”的方法。一旦你这样做了,那么这个方法在功能上就不再存在了,只是它会让事情变慢一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59201891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档