如何修復(elisp)Eval During Expansion中的簡單宏foo
?emacs lisp宏擴展時eval
的以下工作無:
(defmacro foo1 (a)
`(setq (eval ,a) t))
(defmacro foo2 (a)
`(setq ,(eval a) t))
(defmacro foo3 (a)
`(setq ,a t))
我真的不明白什麼在(elisp)Eval During Expansion說。我認爲,如果我得到了它,我就能修復這個宏。
更新:懷遠的解決方案的工作原理:
(defmacro foo7 (a)
`(set ,a t))
(setq x 'b
a 'c)
(foo7 x)
(assert (eq b t))
(assert (eq x 'b))
(foo7 a)
(assert (eq a 'c))
(assert (eq c t))
(macroexpand '(foo7 x)) ; ==> (set x t)
(macroexpand '(foo7 a)) ; ==> (set a t)
您的foo4看起來與foo3相同。 – Yoo
所以它!我甚至找到了! – Vatine