namespaces - No se puede obtener pprint para trabajar en clojure
classpath (2)
Aquí hay un par de ejemplos:
;; cómo usarlo con: requerir y: usar
;; :require
(ns example.pprinter
(:require [clojure.pprint :as pp]))
(def myname "John Smith")
(pp/pprint myname)
;; :use
(ns example.pprinter
(:use clojure.pprint))
(def myname "John Smith")
(pprint myname)
Pregunta de Noob, utilizando Win7 de 64 bits, Clojure 1.2.0, Java 1.6.0_22
Cuando inicio clojure desde la línea de comando, la función de impresión está fácilmente disponible.
user=> pprint
#<pprint$pprint clojure.pprint$pprint@16dfa45>
user=> (pprint "hi")
"hi"
nil
user=>
Pero cuando intento usar pprint desde un archivo, aparece un error. Esto ocurre con y sin espacio de nombres (ns ...: require ...) como se muestra en la documentación de pprint
clj archivo de la siguiente manera:
(ns whatevah
(:require clojure.pprint))
(pprint "hi")
Error de la siguiente manera:
C:/Users/mischw/code/Clojure>java -cp ";c:/users/mischw/code/clojure/classes/*;c:/Program Files (x86)/Java/SWT;c:/users/mischw/code/clojure/classes/bookcode/*" clojure.main swinglearn.clj
Exception in thread "main" java.lang.Exception: Unable to resolve symbol: pprint in this context (swinglearn.clj:14)
... 21 more
Output completed (0 sec consumed) - Normal Termination
No entiendo la idea general de lo que está pasando aquí. ¿Por qué funciona uno pero no el otro? ¿Eso tiene que ver con los espacios de nombres? Classpaths? ¿Alguna otra solución simple? Claramente las preguntas noob, pero encuentro que esto sucede con un montón de ejemplos ... No puedo ejecutarlas aunque parezca sencillo importarlas / usarlas / requerirlas / incluirlas.
Usted está recibiendo mezclado con el use
y / o la import
. require
hace que la biblioteca se cargue, y cada símbolo público que exporta será accesible como, por ejemplo, clojure.pprint/pprint
. Si desea utilizar un nombre más conveniente, como solo pprint
, debe refer
al espacio de nombres. use
es una abreviatura conveniente para "requerir, luego consultar", para cargar la biblioteca sin el prefijo de espacio de nombres.
user> (ns user (:require clojure.pprint))
nil
user> (pprint 1)
; Evaluation aborted.
user> (clojure.pprint/pprint 1)
1
nil
user> (ns user (:use clojure.pprint))
nil
user> (pprint 1)
1
Edición: No estoy seguro de por qué está funcionando para ti desde el REPL. Como puedes ver, no funciona para mí. Me imagino que hizo una configuración anterior que la hace funcionar y luego la olvidó, o posiblemente tenga algún script de inicio que haga esto por usted en el REPL, pero no al cargar desde un archivo.