代码之家  ›  专栏  ›  技术社区  ›  Pieter Breed

在clojure中,如何从命名空间中取消var的定义?

  •  24
  • Pieter Breed  · 技术社区  · 14 年前

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

    (def *http-port* 8080)
    

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

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

    当连接到粘液会话时,我将如何执行此操作?

    1 回复  |  直到 14 年前
        1
  •  36
  •   bfontaine cat-walk    8 年前

    如果我理解正确, 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)