Acabo de empezar a jugar con Clojure, y escribí un pequeño script para ayudarme a entender algunas de las funciones. Comienza así:Confundido por "dejar" en 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))"
])
Entonces va a través *exprs-to-test*
, todos ellos evalúa, e imprime la salida como esta:
(doseq [exstr *exprs-to-test*]
(do
(println "===" (first (read-string exstr)) "=========================")
(println "Code: " exstr)
(println "Eval: " (eval (read-string exstr)))
)
)
El código anterior es todo funciona bien. Sin embargo, (read-string exstr)
se repite así que traté de usar let
para eliminar la repetición de este modo:
(doseq [exstr *exprs-to-test*]
(let [ex (read-string exstr)] (
(do
(println "===" (first ex) "=========================")
(println "Code: " exstr)
(println "Eval: " (eval ex))
)
))
)
Pero esto funciona una vez por el primer elemento de *exprs-to-test*
, a continuación, se bloquea con un NullPointerException
. ¿Por qué la adición de let
causa el bloqueo?
Eso lo solucionó. Gracias por el consejo de estilo de sangrado también. –