相关疑难解决方法(0)

Clojure中的变量范围+ eval

在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.

  1. 为什么第一个代码示例工作而不是后两个?
  2. 如何eval使用绑定变量的表单而不使用def

谢谢!

binding eval clojure let

18
推荐指数
1
解决办法
2957
查看次数

标签 统计

binding ×1

clojure ×1

eval ×1

let ×1