【发布时间】:2014-02-28 20:00:41
【问题描述】:
是否可以将 REPL 会话保存在文件中?是否需要最低版本的 Scala 来执行此操作?我记得看到有人这样做,但我无法在 :help 或文档中对其进行处理。
【问题讨论】:
标签: scala read-eval-print-loop
是否可以将 REPL 会话保存在文件中?是否需要最低版本的 Scala 来执行此操作?我记得看到有人这样做,但我无法在 :help 或文档中对其进行处理。
【问题讨论】:
标签: scala read-eval-print-loop
这在 Scala 2.11 中是可能的。 用法示例:
scala> 1
res0: Int = 1
scala> 2
res1: Int = 2
scala> 3
res2: Int = 3
scala> :save xxx
scala> :load xxx
Loading xxx...
res3: Int = 1
res4: Int = 2
res5: Int = 3
您可以在:load 之前:reset 以获得对结果的正确引用:
scala> 1
res0: Int = 1
scala> res0 + 1
res1: Int = 2
scala> :save xxx
那天晚些时候...
scala> 7
res0: Int = 7
scala> :reset
Resetting interpreter state.
Forgetting this session history:
7
Forgetting all expression results and named terms: $intp
scala> :load xxx
Loading xxx...
res0: Int = 1
res1: Int = 2
【讨论】:
:help 中丢失 :)。
请注意,除了原生 Scala REPL 之外,您还有 shell 脚本项目 Ammonite,它确实有一个 Save/Loadd Session feature:
除了简单的保存和加载(在最近一次保存后简单地丢弃所有内容)之外,您还可以为这些函数提供名称。
这让你可以停止在一个分支上工作,去做一些别的事情,然后可以稍后再回来继续你离开的地方:
@ val (x, y) = (1, 2)
x: Int = 1
y: Int = 2
@ sess.save("xy initialized")
@ val z = x + y
z: Int = 3
@ sess.save("first z")
@ sess.load("xy initialized")
@ val z = x - y
z: Int = -1
【讨论】: