我很好奇……在您展示的原始示例中,您展示了手动准引用和拼接……
在最后的示例中,您只有没有准引用的正常形式。 推测,这些表达式是在某些词法环境中组合和 eval 的。
如果意图是捕获代码,为什么没有
(defmacro call
[& body]
`(call* '~body))
足够? 是否有某种分析级别(例如,覆盖变量)是我没有看到,您打算包含在“调用”中的?
如果您想捕获源代码并对其进行评估,将源代码和结果保存在某些结构中,那么使用我的建议仍然是可行的。 类似如下:
(deftype Call [code]
clojure.lang.IFn
(调用 [this] (eval `(do ~code)))) ;;可能需要缓存结果,这是一个演示。
我缺少什么?