我刚开始使用Clojure玩,我写了一个小脚本来帮助我了解一些功能。它是这样开始的:迷茫“让” Clojure中
(def *exprs-to-test* [
"(filter #(< % 3) '(1 2 3 4 3 2 1))"
"(remove #(< % 3) '(1 2 3 4 3 2 1))"
"(distinct '(1 2 3 4 3 2 1))"
])
然后它通过*exprs-to-test*
,评估它们所有,并打印输出是这样的:
(doseq [exstr *exprs-to-test*]
(do
(println "===" (first (read-string exstr)) "=========================")
(println "Code: " exstr)
(println "Eval: " (eval (read-string exstr)))
)
)
上面的代码是所有工作的罚款。然而,(read-string exstr)
重复,所以我试图用let
消除像这样的重复:
(doseq [exstr *exprs-to-test*]
(let [ex (read-string exstr)] (
(do
(println "===" (first ex) "=========================")
(println "Code: " exstr)
(println "Eval: " (eval ex))
)
))
)
但是,这一次的作品的第一个项目在*exprs-to-test*
,然后用NullPointerException
崩溃。为什么增加let
导致崩溃?
这固定它。感谢您的缩进样式提示。 – 2010-03-07 03:56:08