在clojure中,我怎样才能从命名空间中取消var?

Pie*_*eed 26 namespaces interactive clojure slime

在clojure中我有这样的行来定义默认值:

(def *http-port* 8080)
Run Code Online (Sandbox Code Playgroud)

我现在决定将这些类型的值正式化为一个配置单元,我想取消定义该值,*http-port*以便我可以找到仍然引用该值的位置并更改它们以使用新值.换句话说,我正在通过将值移动到不同的位置来进行重构.

我这样做的方法是退出粘液并尝试重新启动粘液会话.在maven的编译阶段,这些错误被拾取,我可以一次找到并修复一个引用.然后我修复错误,冲洗并重复.这显然令人沮丧.

连接到粘液会话时我该怎么做?

Hug*_*ugh 36

如果我理解正确,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)
Run Code Online (Sandbox Code Playgroud)

  • 其他名称空间仍然可以保存对'foo'值的引用. (7认同)
  • @Jurgen这是真的,但解决方案总比没有好 (2认同)