【发布时间】:2011-09-07 11:32:39
【问题描述】:
在 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 创建的命名空间。
- 为什么第一个代码示例有效,而后两个无效?
- 如何在不使用
def的情况下eval绑定变量的表单?
谢谢!
【问题讨论】: