Clojure引用内部let



引号(语法和非语法)似乎无法检测let语句中的变量:

(let [foo 1] (eval `(print foo)))

这将产生一个错误,或者使用(def foo bar)中绑定到foo的先前值。是否有一种方法,使语法引用使用"本地"变量,让定义代替?

取消引号以替代值:

(let [foo 1] (eval `(print ~foo)))

…或者显式绑定变量:

(declare :^dynamic foo)
(binding [foo 1] (eval '(print foo)))

Kevin

您已经接近了,这应该可以完成工作(基本上,您应该取消引用语句中的局部变量)

(let [foo 1] (eval `(print ~foo)))

另外,虽然eval肯定是一个有效的语言函数,但总体目标是什么?也许还有更好的办法。

弗兰克

最新更新