引用(语法和非语法)似乎无法检测let语句中的变量:
(let [foo 1] (eval `(print foo)))
这将生成错误或使用绑定到foo的任何先前值绑定(def foo bar)。有没有办法让语法引用使用" local"改为定义的变量?
答案 0 :(得分:2)
取消引用以取代该值:
(let [foo 1] (eval `(print ~foo)))
...或显式绑定变量:
(declare :^dynamic foo)
(binding [foo 1] (eval '(print foo)))
有关详细信息,请参阅Variable scope + eval in Clojure。
答案 1 :(得分:1)
凯文
你很接近,这应该做的工作(基本上,你应该在引用的语句中取消引用本地var)
(let [foo 1] (eval `(print ~foo)))
此外,虽然eval
肯定是一种有效的语言功能,但总体目标是什么?可能有更好的方法。
谢