emacs - Emacs/Elisp 中的多态回调

标签 emacs polymorphism elisp overloading

在 elisp 中实现多态回调的惯用方法是什么?

具体来说,假设我有一个次要模式,其中一个函数执行某个操作,然后调用另一个函数。根据当前缓冲区是包含 C++ 文件还是 Java 文件,第二个函数应该有不同的实现。

或者,假设我想重载变量而不是函数。例如,我想调用一些外部可执行文件,根据当前缓冲区是 C++ 文件还是 Java 文件,传递给它的参数之一会有所不同。我希望能够在通用函数中构造命令行并根据缓冲区的内容替换一个参数。是 make-variable-buffer-local正确的方法?最初应该在什么时候(以及通过哪种机制)设置这些局部变量?

最佳答案

我想你有各种各样的方法。为您的回调函数想到的一些选项是:

  • 正如您所提到的,缓冲区局部变量。

    您如何设置它实际上取决于您的用例,但您可以实现特定的主要模式 Hook ,或 after-change-major-mode-hook对于一般情况。
    make-variable-buffer-local如果您希望变量始终是缓冲区本地的,这当然是正确的方法。
  • 将主要模式映射到其相关功能的列表。

    为您需要的所有模式配置它,然后执行当前主要模式的查找。
  • 简单地根据主要模式名称生成函数名称,如果存在这样的函数,则调用它。

  • 在所有情况下,您可能会使用 funcallapply运行选定的功能。

    数字 1 和 2 也与您问题的第二部分相关。

    关于emacs - Emacs/Elisp 中的多态回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262932/

    相关文章:

    emacs - 等待编译完成

    Emacs,如何在组织模式下仅显示当前任务并隐藏其他任务?

    emacs - 如何加载 ansi-term/multi-term 的别名和环境变量?

    emacs - 在 Emacs 中为 tex-mode 修改 Alt+f

    java - 尝试通过在子类中扩展类来向类添加方法?

    c - C语言中的多态性

    emacs - 如何彻底清除Emacs Calc的状态?

    虚函数上的 C++ 多态性

    elisp - Elisp 中计算黄金比例的高效算法

    elisp - 改进 Elisp 条件表达式