2012-01-12 77 views
9

當使用repl時,有時你想銷燬一個變量,因爲它以某種方式妨礙了你的編程(通常是命名空間衝突)。在clojure銷燬變量

有沒有辦法在clojure中銷燬一個變量?

user>(def x 1) 
#'user/x 
user>(aggressive-destroy! x) 
nil 
user>x 
Unable to resolve symbol: x in this context 
+0

http://stackoverflow.com/questions/5570826/how-can-i-undefine-a-function-in-clojure – wespiserA 2012-01-12 21:22:04

回答

14

ns-unmap

user=> (def my-var "this is my-var!") 
#'user/my-var 
user=> (println my-var) 
this is my-var! 
nil 
user=> (ns-unmap 'user 'my-var) 
nil 
user=> (println my-var) 
CompilerException java.lang.RuntimeException: Unable to resolve symbol: my-var in this context, compiling:(NO_SOURCE_PATH:13) 
user=> 
+6

通常更容易使用'* ns *'而不是''用戶'在這裏,特別是如果你在一個長名字的名字空間。 – amalloy 2012-01-12 22:46:13

+0

救了我從單調乏味的重新開始!真棒! – claj 2012-01-13 09:08:35