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))
)
))
)
しかし、これは の最初の項目に対して 1 回機能し*exprs-to-test*
、その後NullPointerException
. let
クラッシュの原因の追加はなぜですか?