В clojure, как я могу отменить определение переменной из пространства имен?

В clojure у меня есть такие строки, которые определяют значения по умолчанию:

(def *http-port* 8080)

Теперь я решил формализовать эти типы значений в единицу конфигурации, и я хотел бы отменить определение значения *http-port*, чтобы я мог найти местоположения, которые все еще ссылаются на это значение, и изменить их, чтобы использовать новое значение. Другими словами, я выполняю рефакторинг, перемещая значение в другое место.

Я делал это так, чтобы выйти из слизи и попытаться перезапустить сеанс слизи. Во время фазы компиляции maven обнаруживаются подобные ошибки, и я могу найти и исправить одну ссылку за раз. Затем я исправляю ошибку, смываю полоскание и повторяю. Это явно расстраивает.

Как мне это сделать при подключении к сеансу слизи?


person Pieter Breed    schedule 17.11.2010    source источник


Ответы (1)


Если я вас правильно понял, 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)
person Hugh    schedule 17.11.2010
comment
Другие пространства имен могут по-прежнему содержать ссылки на значение 'foo. - person Jürgen Hötzel; 17.11.2010
comment
@ Юрген, это правда, но решение лучше, чем ничего - person Pieter Breed; 18.11.2010
comment
Просто помните: пространство имен по умолчанию — «clojure.core». - person Felipe; 16.07.2014