namespaces clojure classpath pprint

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.