问题 如何将Clojure REPL的内容转储到文件中?


所以我一直在研究Clojure教程,到目前为止它非常有趣。不幸的是,每次我关闭我的REPL,我都失去了所有的 defn 和 def 我在上一个会话中创建的。

因此,为了节省将来的时间,是否可以让Clojure REPL将我输入的所有内容保存到文件中,以便我可以挖掘出我将来需要使用的内容?


5045
2017-07-14 10:57


起源

在许多Lisps中,这可以通过“保存图像”来实现,该图像包含已经累积的所有状态,例如, sbcl.org/manual/Saving-a-Core-Image.html,但据我所知,Clojure没有这样的设施。 - Jouni K. Seppänen


答案:


我认为大多数人都使用他们的IDE将代码片段发送到REPL,而不是在REPL中进行大量的直接黑客攻击。这样您就可以更好地了解程序的当前状态。


7
2017-07-14 11:01



sbcl有(保存并死掉)。 - 1.618
如何通过任何IDE远程更新正在运行的Web服务器? - 1.618


如果你 使用Emacs和SLIME,您可以将REPL缓冲区保存到文件中,就像保存任何其他缓冲区一样。


5
2017-07-14 11:26





如果您使用的是类Unix操作系统,则可以使用启动REPL rlwrap。这将为您提供Ctrl-R,以便以简单的方式从历史记录中访问命令,以及存储历史记录本身。

你只需要安装 rlwrap 并将其添加到您启动REPL的行,例如 rlwrap lein repl


2
2017-07-14 11:14





几个提示:

  • 我在REPL中做了很多编码,但是一旦我写了一些有用的东西,我就把它复制/粘贴到源文件中。然后,只要我想让REPL环境恢复到完全配置状态,我就可以运行或重新加载该源文件。
  • 一些REPL(例如我使用的Eclipse逆时针REPL)保留了之前会话的历史记录,因此您可以向上箭头指向您想要重复的早期REPL命令。

1
2017-07-14 12:45





这实际上是一个比看起来更难的问题,因为像这样的转储必须考虑符号和变量依赖关系并以正确的符号顺序输出到文件。也就是说,因为代码是数据,所以应该能够编写一个能够执行此操作的函数。


0
2017-07-28 14:27