2010-11-17 57 views
23

Clojure中我有這樣的行定義的默認值:在clojure中,我如何從命名空間中取消一個var?

(def *http-port* 8080) 

我現在已經決定將這些類型的值將正式配置單元,我想取消定義價值*http-port*這樣我可以找到仍然引用此值並將其更改爲使用新值的位置。換句話說,我正在做一個重構,把值移到不同的位置。

我一直這樣做的方式是退出粘液並嘗試重新啓動粘液會話。在Maven的編譯階段,像這樣的錯誤被拾取,我可以一次找到並修復一個引用。然後我修復錯誤,清洗並重復。這顯然令人沮喪。

我如何在連接到粘液會話時執行此操作?

回答

33

如果我理解正確的話,應該ns-unmap做你想做的:

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

其他命名空間可能仍堅持「foo的值引用。 – 2010-11-17 20:39:38

+2

@Jurgen這是真的,但解決方案總比沒有好 – 2010-11-17 21:03:34

+0

只需記住:默認名稱空間是'clojure.core – 2014-07-16 01:46:13

相關問題