如何在Clojure中取消定义函数?

时间:2011-04-06 17:54:56

标签: clojure

我常常需要在clojure中取消定义一个函数。如果我用defn定义一些东西我怎么能取消它呢?

3 个答案:

答案 0 :(得分:38)

没有单参数版本,因为可以在多个名称空间中映射相同的Var。如果您使用REPL,则通常需要取消绑定用户命名空间,例如

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

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

答案 1 :(得分:19)

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

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

(ns-unmap *ns* 'method) 

答案 2 :(得分:7)

如果你有:

(def x 42)

取消绑定var:

可能很有用
(.unbindRoot #'x)

现在,如果你试试这个

x

你得到:

#<Unbound Unbound: #'user/x>