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

Zub*_*air 24 clojure

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

Stu*_*way 38

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

(ns-unmap 'user 'symbol-to-unbind)
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么ns-unmap不能只采用一个合格的符号,例如''user/symbol-to-unbind`? (3认同)

Ale*_*Ott 19

我想,您可以使用ns-unmap来执行此操作.

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

(ns-unmap *ns* 'method) 
Run Code Online (Sandbox Code Playgroud)


Dav*_* J. 7

如果你有:

(def x 42)
Run Code Online (Sandbox Code Playgroud)

取消绑定var可能很有用:

(.unbindRoot #'x)
Run Code Online (Sandbox Code Playgroud)

现在,如果你试试这个

x
Run Code Online (Sandbox Code Playgroud)

你得到:

#<Unbound Unbound: #'user/x>
Run Code Online (Sandbox Code Playgroud)