在 elisp 中实现多态回调的惯用方法是什么?
具体来说,假设我有一个次要模式,其中一个函数执行某个操作,然后调用另一个函数。根据当前缓冲区是包含 C++ 文件还是 Java 文件,第二个函数应该有不同的实现。
或者,假设我想重载变量而不是函数。例如,我想调用一些外部可执行文件,根据当前缓冲区是 C++ 文件还是 Java 文件,传递给它的参数之一会有所不同。我希望能够在通用函数中构造命令行并根据缓冲区的内容替换一个参数。是 make-variable-buffer-local
正确的方法?最初应该在什么时候(以及通过哪种机制)设置这些局部变量?
最佳答案
我想你有各种各样的方法。为您的回调函数想到的一些选项是:
您如何设置它实际上取决于您的用例,但您可以实现特定的主要模式 Hook ,或
after-change-major-mode-hook
对于一般情况。make-variable-buffer-local
如果您希望变量始终是缓冲区本地的,这当然是正确的方法。 为您需要的所有模式配置它,然后执行当前主要模式的查找。
在所有情况下,您可能会使用
funcall
或 apply
运行选定的功能。数字 1 和 2 也与您问题的第二部分相关。
关于emacs - Emacs/Elisp 中的多态回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262932/