Как я могу отменить определение функции в Clojure? - PullRequest
24 голосов
/ 06 апреля 2011

Часто мне нужно отменить определение функции в clojure. Если я определю что-то с помощью defn, как я могу отменить это определение?

Ответы [ 3 ]

38 голосов
/ 06 апреля 2011

Не существует версии с одним аргументом, поскольку один и тот же Var может отображаться в нескольких пространствах имен.Если вы работаете с REPL, вам часто нужно отсоединять от пространства имен пользователя, например

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

Первый аргумент ns-unmap может быть символом или пространством имен, а второй аргумент должен бытьсимвол.

19 голосов
/ 06 апреля 2011

Я думаю, что вы можете использовать ns-unmap для этого.

P.S. Не удалось добавить этот код в комментарий, поэтому я разместил его здесь. Для отмены отображения функции в текущем пространстве имен вам необходимо использовать следующий код:

(ns-unmap *ns* 'method) 
7 голосов
/ 30 июня 2013

Если у вас есть:

(def x 42)

Может быть полезно отменить привязку к переменной:

(.unbindRoot #'x)

Теперь, если вы попробуете это

x

Выполучить:

#<Unbound Unbound: #'user/x>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...