2010-11-17 13 views
23

In clojure devo linee come questa che definiscono i valori di default:In clojure, come posso rimuovere un var da uno spazio dei nomi?

(def *http-port* 8080) 

Ora ho deciso di formalizzare questo tipo di valori in un'unità di configurazione e vorrei ridefinisca il valore *http-port* in modo che posso trovare le posizioni che fanno ancora riferimento a questo valore e modificarle per utilizzare il nuovo valore. In altre parole, sto eseguendo un refactoring spostando il valore in un'altra posizione.

Il modo in cui lo sto facendo è di chiudere la melma e provare a riavviare la sessione di melma. Durante la fase di compilazione di Maven si verificano errori come questi e posso trovare e correggere un riferimento alla volta. Quindi correggo l'errore, lavo risciacquo e ripeto. Questo è ovviamente frustrante.

Come dovrei farlo mentre sono connesso a una sessione di melma?

risposta

33

Se ho capito bene, ns-unmap dovrebbe fare ciò che si vuole:

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

altri spazi dei nomi possono ancora tenere riferimenti al valore di 'foo. –

+2

@Jurgen questo è vero, ma la soluzione è meglio di niente –

+0

Solo per ricordare: lo spazio dei nomi predefinito è 'clojure.core –

Problemi correlati