【问题标题】:How can I undefine a function in Clojure?如何在 Clojure 中取消定义函数?
【发布时间】:2011-04-06 17:54:55
【问题描述】:

我经常需要在 clojure 中取消定义一个函数。如果我用 defn 定义了一些东西,我该如何取消它?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    没有单参数版本,因为同一个 Var 可以映射到多个命名空间中。如果您使用 REPL 工作,您通常希望从用户命名空间解除绑定,例如

    (ns-unmap 'user 'symbol-to-unbind)
    

    ns-unmap 的第一个参数可以是符号或命名空间,第二个参数应该是符号。

    【讨论】:

    • ns-unmap 不能只采用单个限定符号的任何原因,例如'user/symbol-to-unbind?
    【解决方案2】:

    我认为,您可以使用 ns-unmap 来执行此操作。

    附:无法将此代码添加到评论中,所以我把它放在这里。要在当前命名空间中取消映射函数,您需要使用以下代码:

    (ns-unmap *ns* 'method) 
    

    【讨论】:

    • 我在使用 (ns-unmap ::some-method) 时得到 java.lang.IllegalArgumentException。是否有一个参数版本?
    【解决方案3】:

    如果你有:

    (def x 42)
    

    取消绑定 var 可能很有用:

    (.unbindRoot #'x)
    

    现在,如果你试试这个

    x
    

    你得到:

    #<Unbound Unbound: #'user/x>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多