2011-03-23 20 views
5

Tengo un proyecto leiningen configurado. En uno de los archivos fuente de clojure, he definido algunos registros. Mi flujo de trabajo suele ser emacs y conectarse a un REPL 'lein swank'. Una vez que me he conectado a REPL, cambio al espacio de nombre apropiado y C-c C-k a un archivo, para poder comenzar a trabajar con REPL y el código en el archivo. Sin embargo, si realizo cambios en los registros en ese archivo y C-c C-k it, el REPL no recoge los cambios.clojure REPL no detecta los cambios realizados en defrecord

Por lo tanto, tal como está, cada vez que tengo que hacer cambios en un registro, tengo que detener el proceso lein swank, reiniciarlo y volver a conectarlo desde emacs. Esto se está haciendo viejo muy rápido. ¿Qué me estoy perdiendo? He intentado C-c C-l en lugar de C-c C-k, pero eso no funciona. He intentado eliminar el directorio 'clase' en la raíz del proyecto, pero eso también es un no-go.

Agradecería cualquier idea o recomendación.

Además, como un lado, siempre estoy trabajando en el espacio de nombres donde se definen los registros.

Editar: En realidad, estoy cambiando la implementación de un protocolo en el defrecord. Una vez que lo cambio y compilo usando C-c C-k, y creo un nuevo registro en el REPL, el REPL todavía está usando la implementación del protocolo anterior.

+0

podría pegar en una fragmento del repl mostrando el valor anterior, cambiándolo y luego el nuevo valor. Creo que ayudaría a agregar contexto para que podamos ayudar más –

+0

@Arthur: Debería haber dejado esto más claro. Estoy cambiando la implementación de un protocolo en el defrecord, y cuando realizo ese cambio, el REPL sigue usando la implementación anterior, incluso después de crear una nueva instancia del registro. – mofeeta

+0

Sé Slime/Swank solo de Common Lisp. Me sorprende que no uses 'C-c C-c' para compilar formularios individuales a nivel superior. Por cierto, hay 'C-c ~' para cambiar el paquete y el directorio de REPL al archivo y punto actuales. – Svante

Respuesta

4

Podría usar un ejemplo, pero tal vez está cambiando la definición de los registros y está buscando instancias de algunos registros que se hicieron antes del cambio?

si define una instancia del registro de la réplica, a continuación, cambie el defrecord, vuelva a cargar la réplica, y luego cree una nueva con un nombre diferente, puede ver las dos copias y las diferencias entre ellas.

Trato de evitar este tipo de confusión por tener un archivo en mi proyecto que llama (use :reload-all ... all the namespaces in my project ...) entonces puedo recargar simplemente este archivo y la recarga, todos los tiros a cabo las viejas ataduras var etc.

Cuestiones relacionadas