【问题标题】:How can you dump contents of Clojure REPL to a file?如何将 Clojure REPL 的内容转储到文件中?
【发布时间】:2011-10-05 05:55:28
【问题描述】:

所以我一直在编写 Clojure 教程,到目前为止它非常有趣。不幸的是,每次我关闭我的 REPL 时,我都会丢失我在上一个会话中创建的所有 defndef

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

【问题讨论】:

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

标签: clojure read-eval-print-loop


【解决方案1】:

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

【讨论】:

  • sbcl have (save-and-die)。
  • 如何通过任意IDE远程热更新正在运行的Web服务器?
  • @1.618 在sbcl中是save-lisp-and-die
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      几个提示:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多