首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在elisp中编译变量

在elisp中编译变量
EN

Stack Overflow用户
提问于 2016-06-29 02:02:26
回答 1查看 77关注 0票数 1

如何在elisp中编译函数调用的结果变量?是需要在所有变量的主体中添加一个eval-when-compile,还是有什么方法可以确保相同的结果,而不需要在所有变量定义中重写呢?

用例是编译我在机器之间变化的局部变量。例如,

代码语言:javascript
复制
(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/“,但除非我将其重写为

代码语言:javascript
复制
(defconst my/org (eval-when-compile (setup-defaults "org")))

那么,对于我所有的变量,我需要这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-29 02:17:26

啊,算了吧,这就是宏的作用,只用defmacro就可以解决这个问题,

代码语言:javascript
复制
(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:/"))))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38089120

复制
相关文章

相似问题

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