破坏clojure中的变量

cla*_*laj 9 clojure

使用repl时,有时你想销毁一个变量,因为它会以某种方式妨碍你的编程(最常见的是命名空间冲突).

有没有办法在clojure中销毁变量?

user>(def x 1)
#'user/x
user>(aggressive-destroy! x)
nil
user>x
Unable to resolve symbol: x in this context
Run Code Online (Sandbox Code Playgroud)

Sco*_*ott 14

NS-取消映射

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=> 
Run Code Online (Sandbox Code Playgroud)

  • 这里通常更容易使用`*ns*`而不是''user`,特别是如果你在一个名字长的名称空间中. (6认同)