2011-07-14 13 views
10

Así que he estado trabajando en un tutorial de Clojure y es muy divertido hasta ahora. Desafortunadamente, cada vez que cierro mi REPL, pierdo todos los defn y def que creé en la sesión anterior.¿Cómo se puede descargar el contenido de Clojure REPL a un archivo?

Entonces, para ahorrar tiempo en el futuro, ¿es posible que Clojure REPL guarde todo lo que he escrito en un archivo para que pueda encontrar lo que necesito para usos futuros?

+2

En muchos Lisps esto se puede lograr "guardando una imagen" que contenga todo el estado que se ha acumulado, p. http://www.sbcl.org/manual/Saving-a-Core-Image.html, pero hasta donde yo sé, Clojure no tiene esa facilidad. –

Respuesta

8

Creo que la mayoría de la gente trabaja usando su IDE para enviar fragmentos de código al REPL, en lugar de hacer muchos hackeos directos en el REPL. De esta forma tendrá una mejor idea del estado actual del programa.

2

Si está utilizando un sistema operativo similar a Unix, puede iniciar su REPL utilizando rlwrap. Esto le daría Ctrl-R para acceder a comandos desde el historial de una manera fácil, así como también almacenar el historial.

Solo tiene que instalar rlwrap y anteponerla a la línea donde inicia REPL, p. rlwrap lein repl

1

par de consejos:

  • que hacer un montón de codificación en el REPL, pero tan pronto como escribo algo que funciona entonces copiar/pegar en un archivo de origen. Luego, puedo ejecutar o volver a cargar ese archivo fuente cada vez que quiero que un entorno REPL regrese a un estado completamente configurado.
  • Algunos REPL (por ejemplo, el Eclipse Counterclockwise REPL que uso) mantienen el historial de las sesiones anteriores, por lo que puede hacer una flecha hacia arriba a los comandos REPL anteriores que desea repetir.
0

Esto es en realidad un problema más difícil de lo que parece porque un volcado como este debe tener en cuenta las dependencias de símbolos y vars y la salida al archivo en el orden correcto de símbolos. Dicho esto, dado que el código es información, uno debería poder escribir una función que lo haga.

Cuestiones relacionadas