如何在elisp中编译函数调用的结果变量?是需要在所有变量的主体中添加一个eval-when-compile,还是有什么方法可以确保相同的结果,而不需要在所有变量定义中重写呢?
用例是编译我在机器之间变化的局部变量。例如,
(defun setup-defaults (loc)
(when (eq system-type 'windows-nt)
(cond
((file-exists-p (expand-file-name loc "~"))
(file-name-as-directory (expand-file-name loc "~")))
((file-exists-p (expand-file-name loc "d:/"))
(file-name-as-directory (expand-file-name loc "d:/"))))))
(defconst my/org (setup-defaults "org"))
(defconst my/home
(eval-when-compile
(file-name-directory
(file-chase-links (or load-file-name "~/.emacs.d/init.el")))))变量my/home将被编译为"~/.emacs.d/“,但除非我将其重写为
(defconst my/org (eval-when-compile (setup-defaults "org")))那么,对于我所有的变量,我需要这样做吗?
发布于 2016-06-29 02:17:26
啊,算了吧,这就是宏的作用,只用defmacro就可以解决这个问题,
(defmacro setup-defaults (loc)
(when (eq system-type 'windows-nt)
(cond
((file-exists-p (expand-file-name loc "~"))
(file-name-as-directory (expand-file-name loc "~")))
((file-exists-p (expand-file-name loc "d:/"))
(file-name-as-directory (expand-file-name loc "d:/"))))))https://stackoverflow.com/questions/38089120
复制相似问题