我可以阅读文档,所以我并不需要剪切和粘贴。
我正在尝试了解此功能的动机。
我什么时候要使用它?
最佳答案
documentation in the Emacs lisp manual确实有一些示例情况似乎可以回答您的问题(与doc字符串相对)。
从查看Emacs源代码开始,eval-and-compile
用于使编译器安静,使宏/函数在编译(和评估)期间可用,或使特定于功能/版本的宏/函数变体在编译期间可用。
我发现有帮助的一种用法是 ezimage.el
。在那里,在if
内放了一个eval-and-compile
语句,以根据是否在Emacs或XEmacs中对软件包进行了编译/评估以及是否存在特定功能来有条件地定义宏。通过将条件包装在eval-and-compile
中,可以在编译期间启用适当的宏用法。在 mwheel.el
中可以找到类似的情况。
同样,如果您想通过fset
定义一个函数并在编译期间可用,则需要用fset
包装对eval-and-compile
的调用,因为否则符号->函数关联在评估文件之前不可用。调用fset
只会优化分配,实际上并不会执行分配)。为什么在编译过程中需要此作业?使编译器安静。注意:这只是我对elisp文档中内容的重新措辞。
我确实注意到Emacs代码中有很多用途,它们只是包装了对require
的调用,当您阅读文档时听起来很多余。我不知道如何解释这些。
关于emacs - Emacs函数(eval-and-compile ...)的作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2904555/