load-string在for循环中不起作用

时间:2017-06-14 17:26:06

标签: for-loop clojure

在REPL中,这段代码工作得很好并给出答案36

(do
  (load-string (str "(def yyy" 2 " 18)"))
  (* 2 yyy2))

虽然当我向其中引入for循环时它不起作用

(do
 (for [x [1 2 3]]
  (load-string (str "(def yyyy" x " 18)")))
 (* 2 yyyy2))

错误表示无法解析符号yyyy2,它应该在load-string中定义。有些专家可以解释一下我的原因吗?谢谢!

1 个答案:

答案 0 :(得分:1)

for生成一个惰性序列,因此在强制进行评估之前,不会评估load-string表达式。您可以将fordorun包裹inputType="text"来强制执行此操作。

对于您只需要副作用的情况,您应该使用doall,或者只需要迭代一系列数字doseq也可能会很方便。