如何保存REPL会话?

12

是否可以将REPL会话保存到文件中? 这是否需要Scala的最低版本? 我记得看过有人这样做,但我无法在: help或文档中找到它。

2个回答

18

从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

1
公平地说,这确实在2.10的:help中缺失了 :)。 - mikołak
@som-snytt 我将我的项目编译为2.10,而不是2.11,那么它会编译到2.11吗?还是只是用于sbt本身的2.11?或者你的意思是这是在2.11中添加的? - matanster

3
请注意,除了本地的Scala REPL之外,您还可以使用shell脚本项目Ammonite,它具有保存/加载会话功能

除了普通的保存和加载外,这些函数只是在最近的保存后丢弃所有内容,您还可以为这些函数提供名称。
这样,您就可以停止在一个分支上工作,去做其他事情一段时间,然后能够回来继续之前离开的地方:

@ 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接