如何在Scala REPL中访问最后一个结果?

18

在Python REPL中,我可以做像这样的事情:

>>> [1,2,3,4]
[1, 2, 3, 4]
>>> sum(_)
10
在 Clojure REPL 中,我可以这样做:
user=> "Hello!"
"Hello!"

user=> *1
"Hello!"

在Scala REPL中是否有类似这样的功能?

3个回答

42
是的,您可以使用点表示法来引用上一个结果:
scala> List(1,2,3,4)
res0: List[Int] = List(1, 2, 3, 4)

scala> .sum
res1: Int = 10

这对于类似 scala> 4 + 5 然后 scala> . * 3 的情况不起作用。请提供更多细节,因为我的谷歌搜索“scala .”没有帮助。 - Merlin
我应该补充说明一下,它适用于类似于shell命令结果的情况:scala> :sh ls -l然后 scala> .lines foreach println - Merlin

8

您可以将以resN形式出现的前一个输出称为N的一些结果。您可能已经注意到,在Scala REPL中,结果以resN: Type = value的形式打印:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

scala> List(1,2,3,4)
res0: List[Int] = List(1, 2, 3, 4)

scala> "Hello!"
res1: java.lang.String = Hello!

嗯,那个resN是一个真正的变量名。在这个例子中,至少在REPL打开期间,你可以将列表称为res0,字符串称为res1

scala> (res0.toString + res1) toLowerCase
res2: java.lang.String = list(1, 2, 3, 4)hello!

-1

通常我只需要按下键即可回到上一行代码并继续打字。这样做的优点是,整个表达式都被保留在一起,方便后期进行剪切和粘贴或编辑。


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