2010-11-17 5 views
23

En clojure que tienen líneas de este tipo que definen los valores por defecto:En clojure, ¿cómo puedo undef var desde un espacio de nombres?

(def *http-port* 8080) 

ahora he decidido formalizar este tipo de valores en una unidad de configuración y me gustaría que quitar la definición del valor *http-port* para que pueda encontrar las ubicaciones que todavía se refieren a este valor y las cambian para usar el nuevo valor. Estoy haciendo una refactorización en otras palabras moviendo el valor a una ubicación diferente.

La forma en que he estado haciendo esto es dejar de baba y tratar de reiniciar la sesión de baba. Durante la fase de compilación de maven, se recogen errores como estos y puedo buscar y corregir una referencia a la vez. Luego arreglo el error, lave el enjuague y repito. Esto es obviamente frustrante.

¿Cómo podría hacer esto mientras estoy conectado a una sesión de baba?

Respuesta

33

Si he entendido bien, ns-unmap debe hacer lo que quiera:

user=> foo 
java.lang.Exception: Unable to resolve symbol: foo in this context (NO_SOURCE_FILE:1) 
user=> (def foo 1) 
#'user/foo 
user=> foo 
1 
user=> (ns-unmap (find-ns 'user) 'foo) 
nil 
user=> foo 
java.lang.Exception: Unable to resolve symbol: foo in this context (NO_SOURCE_FILE:1) 
+7

Otros espacios de nombres todavía pueden contener referencias al valor de 'foo. –

+2

@Jurgen esto es cierto, pero la solución es mejor que nada –

+0

Solo para recordar: el espacio de nombre predeterminado es 'clojure.core –

Cuestiones relacionadas