在 Clojure 中,
(def x 3)
(eval '(prn x))
打印 3,而
(let [y 3]
(eval '(prn y)))
和
(binding [z 3] (eval '(prn z)))
生成“无法解析 var”异常。
根据http://clojure.org/evaluation、eval
、load-string
等生成临时命名空间来评估其内容。因此,我希望上述代码示例都不起作用,因为(def x 3)
是在我当前的命名空间中完成的,而不是由eval
.
- 为什么第一个代码示例有效,而后两个无效?
- 如何
eval
不使用绑定变量的表单def
?
谢谢!