gpt4 book ai didi

emacs - 将符号传递给 emacs 中的宏

转载 作者:行者123 更新时间:2023-12-01 12:48:19 26 4
gpt4 key购买 nike

我是宏的新手。我正在尝试编写一个宏来生成一些函数:

(defmacro test (name)
`(defun ,(intern (concat "fun-" (symbol-name name))) ()
...))

我想将一个符号传递给这个宏,比如 (test 'stuff) ,但 emacs 给了我这个错误:
Debugger entered--Lisp error: (wrong-type-argument symbolp (quote stuff))

这是在告诉我 (quote staff)不是 symbol-name 的正确论点?我怎样才能解决这个问题 ?

最佳答案

这一切似乎没问题。唯一的事情是你应该用一个不带引号的符号来调用你的宏,就像这样:

(test stuff)

这样做的原因是,正如 Emacs Lisp Manual 中所述。 :

Macros [...] operate on the unevaluated expressions for the arguments, not on the argument values as functions do.



当您将符号传递给函数时,您习惯于将它们引用以防止它们被视为变量名称并评估为关联的值。但是,宏参数不会在宏扩展期间计算,而是在扩展本身被计算时计算。

关于emacs - 将符号传递给 emacs 中的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14000318/

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