在Clojure,
(def x 3)
(eval '(prn x))
Run Code Online (Sandbox Code Playgroud)
打印3,而
(let [y 3]
(eval '(prn y)))
Run Code Online (Sandbox Code Playgroud)
和
(binding [z 3] (eval '(prn z)))
Run Code Online (Sandbox Code Playgroud)
生成'无法解析var'异常.
据http://clojure.org/evaluation,eval,load-string,等生成临时命名空间来评估它们的内容.因此,我希望上述代码示例都不起作用,因为(def x 3)它是在我当前的命名空间中完成的,而不是由当前命名空间创建的eval.
eval使用绑定变量的表单而不使用def?谢谢!