Как очистить 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 или макрос, это действительно не имеет значения.