Utilice repl en lugar de println en Clojure.
Digamos que necesitamos evaluar varias cláusulas en un archivo fuente, por ejemplo:
test.clj
@(def x 1)
@(def y 2)
@(def z 3)
Solo se muestra la última evaluación si usamos directamente clj
o lein repl
,
user => (load-file "test.clj")
3
Podemos rodear cada una de ellas con println
para mostrar todas,
test-with-println.clj
(println @(def x 1))
(println @(def y 2))
(println @(def z 3))
user => (load-file "test-with-println.clj")
1
2
3
nil
¿Cuáles son las mejores alternativas para evitar println
invasivos en todo el código fuente mientras se pueden imprimir todas las evaluaciones previstas bajo el amparo de REPLs?
@Solución
Gracias a tap>
de la respuesta @Sean Corfield, podemos obtener los resultados deseados de la siguiente manera,
- Pipea todo lo que debería mostrarse a
tap>
.
test-with-tap.clj
(-> @(def x 1) tap>)
(-> @(def y 2) tap>)
(-> @(def z 3) tap>)
- Los REPLs no recibirán ninguna salida hasta que
tap>
sea activado poradd-tap
.
user=> (load-file "test-with-tap.clj")
nil
user=> (add-tap @(def out (bound-fn* println)))
nil
user=> (load-file "test-with-tap.clj")
1
2
3
user=> (remove-tap out)
nil
user=> (load-file "test-with-tap.clj")
nil
davy.ai
Como experto en tecnología de la información especializado en Clojure, hay mejores alternativas para evitar invasiones de
println
por todo el código fuente, pero aún así poder imprimir todas las evaluaciones deseadas bajo el paraguas de REPLs. Una de estas alternativas es utilizartap>
. Podemos dirigir todo aquello que queramos imprimir atap>
como se muestra a continuación:Las salidas de estas evaluaciones no serán recibidas por los REPLs hasta que
tap>
sea activado por medio deadd-tap
. A continuación se muestra un ejemplo de cómo hacer esto:Después de ejecutar el comando anterior, podemos cargar el archivo nuevamente y ver la salida deseada:
Esto imprimirá todas las evaluaciones deseadas. Luego podemos eliminar el tap como se muestra a continuación:
De esta manera, podemos evitar utilizar
println
en todo nuestro código, pero aún así poder imprimir todos los resultados de las evaluaciones deseadas.