Как очистить REPL в режиме сидра?
Я не имею в виду очистку текстового вывода REPL; я имею в виду очистку всех оценка результаты в REPL. Во время разработки, неоднократно C-c C-q
и C-c M-j
низкая эффективность.
обновление
может быть какое-то плохое поведение отладки. Я не уверен, как другие люди разрабатывают проги с сидром, но мне действительно нужна функциональность, упомянутая выше. Я думаю, другие разработчики также сталкиваются с теми же проблемами, что и шахта.
например, в верхней части блока Clojure prog я использую declare
объявить функцию foo
, который используется другой функцией bar
и foo
осуществляется через bar
. Тогда Я ... --7--> и т. д., и prog идет хорошо. Позже я удалил вперед объявление foo
иногда. Что происходит? Прога все еще идет хорошо. действительно? Затем я совершаю всю свою работу и с удовольствием завершаю сеанс Cider REPL.
катастрофы на утро: символ foo
не найден!
это моя история. Значит, никто никогда не сталкивался с подобными проблемами?
5 ответов
Как уже указывали другие, "правильное" решение-использоватькомпонент библиотека.
но так как вы работаете в сидре, вы можете использовать C-c C-x
для выполнения cider-refresh
, который перезагрузит ваш проект и тем самым воссоздаст ваше начальное состояние.
в EMACS когда я работаю с Clojure в режиме сидра, я использую:
C-c M-o в буфере repl
Это связано с cider-repl-clear-buffer
Если вы имеете дело с большим количеством вещей, которые имеют состояние, которое вы хотите очистить, чтобы очистить развивающей среды можно рассмотреть следующим образом:
1.) Переоцените свой дизайн и посмотрите, сколько этого состояния на самом деле необходимо. Во многих ситуациях вы можете использовать атомы, ссылки или другие элементы с состоянием без необходимости, и если вы примете более функциональный подход, вам не понадобится очищать среду разработки как часто.
предполагая законные причины для использования государства:
2.) Вы можете стереть пространство имен и все его содержимое с помощью функции clojure remove-ns
: например для пространства имен user.fancy-namespace
вы можете очистить NS, запустив (remove-ns 'user.fancy-namespace')
а затем просто повторно оценить пространство имен. Это хорошо работает для очистки одного пространства имен, но если элементы с состоянием, которые необходимо очистить, находятся в других пространствах имен, это может быть утомительно для каждого пространства имен вовлеченный.
3.) Стюарт Сьерра компонент библиотека была разработана для управления компонентами, которые связаны с государственными. Очень полезно для управления подключениями к БД, клиентами memcache и т. д., Но потребуется переархитировать ваш проект, чтобы в полной мере использовать его.
Как упоминалось другими, необходимо только очистить repl, если у вас есть переменные, которые содержат информацию о состоянии. Для негосударственных несущих компонентов достаточно просто перезагрузить исходный буфер (переоценить его).
один очень интересный способ управления рабочим процессом, который имеет компоненты, отслеживающие состояние, - это структура компонентов Stuart Seirra. См.http://youtu.be/13cmHf_kt-Q
другой подход-написать код, используя defonce, а не def, что позволит вам перезагрузить исходный код без переопределения переменных состояния.
Если, с другой стороны, вы хотите сделать это, чтобы очистить определения defn или defmacro, которые вам не нужны, т. е. очистить "polution" от вашего repl, то, честно говоря, я бы не беспокоился. Если ничто не вызывает defn или макрос, это действительно не имеет значения.