2015-06-10 34 views
0

引用(包括语法和非语法)似乎无法检测let语句里面瓦尔:Clojure的报价里面让

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

这将产生任何约束的前值被绑定到foo的错误或使用(def foo bar)。有没有办法使语法引用使用“本地”变量,让定义呢?

回答

1

凯文

你接近,这应该做的工作(基本上,你应该解除引用在引用语句中的局部变量)

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

此外,虽然eval无疑是一个有效的语言功能,总体目标是什么?完全可能有更好的方法。

Frank

2

引文结束替代的价值:

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

...或显式绑定的变量:

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

详见Variable scope + eval in Clojure