gpt4 book ai didi

emacs - 如何避免 emacs 宏中急切的宏扩展失败?

转载 作者:行者123 更新时间:2023-12-01 10:46:56 25 4
gpt4 key购买 nike

我定义了这个宏:

(defmacro with-current-directory (directory &rest body)
"Set the working directory temporarily set to DIRECTORY and run BODY.
DIRECTORY is expanded"
`(let ((default-directory
,(file-name-as-directory
(expand-file-name (eval directory)))))
,@body))

我在打开 emacs 时加载的一些 lisp 函数中使用了它。我总是收到这些警告:

Eager macro-expansion failure: (void-variable repo-dir)
Eager macro-expansion failure: (wrong-type-argument stringp nil)

据我所知,这是因为这些变量未在加载时定义,而 emacs 正在尝试评估它们。我的问题是,如何避免收到这些警告。有没有办法定义宏,以免发生这种情况?我不知道如何使用变量的值,而不是变量本身的符号。

最佳答案

像这样:

`(let ((default-directory
(file-name-as-directory (expand-file-name ,directory))))

因为 directory 不是值,而是求值为该值的 lisp 表达式,您需要将表达式插入(使用逗号运算符)到宏的扩展中。如果您在调用 file-name-as-directory 之前放置逗号,您将必须能够在宏扩展时根据标记计算目录表达式,如果 directory 引用变量名,则不能这样做。

关于emacs - 如何避免 emacs 宏中急切的宏扩展失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25097816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com