clojure REPL не регистрирует изменения, внесенные в запись - PullRequest
5 голосов
/ 23 марта 2011

У меня есть проект leiningen. В одном из исходных файлов clojure я определил несколько записей. Мой рабочий процесс состоит в том, чтобы обычно запускать emacs и подключаться к REPL 'lein swank'. После подключения к REPL я переключаюсь в соответствующее пространство имен и C-c C-k файл, чтобы я мог начать работать с REPL и кодом в файле. Однако, если я внесу изменения в записи в этом файле и C-c C-k, REPL не получит изменения.

Итак, в любом случае, каждый раз, когда мне нужно внести изменения в запись, я должен остановить процесс lein swank, перезапустить его и подключиться к нему из emacs. Это очень быстро стареет. Что мне не хватает? Я пробовал C-c C-l вместо C-c C-k, но это не работает. Я попытался удалить каталог 'class' в корне проекта, но это также не разрешено.

Буду признателен за любые идеи или рекомендации.

Кроме того, я всегда работаю в пространстве имен, в котором определены записи.

Edit: я на самом деле меняю реализацию протокола в defrecord. После того как я изменил его и скомпилировал с использованием C-c C-k и создал новую запись в REPL, REPL все еще использует старую реализацию протокола.

1 Ответ

4 голосов
/ 23 марта 2011

Я мог бы использовать пример, но, возможно, вы изменяете определение записей и просматриваете экземпляры некоторых записей, которые были сделаны до изменения?

, если вы определяете экземпляр записи из реплики, затем измените defrecord, перезагрузите repl, а затем создайте новый с другим именем. Вы сможете увидеть как копии, так и различия между ними.

Я пытаюсь избежать такого рода путаницы, имея в своем проекте файл с именем (use :reload-all ... all the namespaces in my project ...), затем я могу перезагрузить только этот файл, а reload-all выбрасывает старые привязки var и т. Д.

...