clojure REPL не улавливает изменения, сделанные для дезаписи

У меня есть проект 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 в корне проекта, но это тоже не помогло.

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

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

Редактировать: я фактически меняю реализацию протокола в derecord. Как только я изменю его и скомпилирую с помощью C-c C-k и создам новую запись в REPL, REPL по-прежнему будет использовать старую реализацию протокола.


person mofeeta    schedule 23.03.2011    source источник
comment
Не могли бы вы вставить фрагмент из repl, показывающий старое значение, изменив его, а затем новое значение. Я думаю, это поможет добавить контекст, чтобы мы могли помочь больше   -  person Arthur Ulfeldt    schedule 23.03.2011
comment
@Arthur: я должен был сделать это более ясным. Я меняю реализацию протокола в derecord, и когда я делаю это изменение, REPL по-прежнему использует старую реализацию — даже после создания нового экземпляра записи.   -  person mofeeta    schedule 23.03.2011
comment
Я знаю Slime/Swank только из Common Lisp. Я удивлен, что вы не используете C-c C-c для компиляции отдельных форм верхнего уровня. Кстати, есть C-c ~ для переключения пакета и каталога REPL на текущий файл и точку.   -  person Svante    schedule 24.03.2011
comment
Не могли бы вы вставить фрагмент из repl, а также фрагменты определений протокола до и после. Если вы не в состоянии раскрыть источник, возможно, вы могли бы сделать надуманный пример с той же проблемой? пс: какая версия clojure   -  person Arthur Ulfeldt    schedule 24.03.2011


Ответы (1)


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

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

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

person Arthur Ulfeldt    schedule 23.03.2011