(defun my-blah (str)
(rx (+ (eval (substring str 1)))))
该代码的评估将以下消息放入消息缓冲区中:
Eager macro-expansion failure: (void-variable str)
这是什么意思,有什么需要担心的吗?
该功能似乎工作正常。另一方面,对以下代码的评估不会生成这样的消息:
(defvar my-str "oink")
(rx (+ (eval (substring my-str 1))))
附录:在不生成此类消息的情况下定义函数的替代方法
(defun my-nah (str)
(rx-to-string `(+ ,(substring str 1))))
(defun my-llama (str)
(eval `(rx (+ ,(substring str 1)))))