如何访问 Scala REPL 中的最后一个输出值?

How can I access the last output value in the Scala REPL?

在 Ruby、Python 以及可能还有一堆其他 REPL 中,您可以使用 _:

来引用最后一个值
>> longCalculationIForgotToAssignToAVariable
42
>> foo = _
>> foo
42

如何在 Scala REPL 中执行此操作?我知道 REPL 的 . 特性:

scala> foo.getBar()
res1: com.Whosebug.Bar = [Bar]

scala> .getBaz() // calls method on bar

但这不是我想要的。显然 _ 也没有,否则我不会问:

scala> val foo = _
<console>:37: error: unbound placeholder parameter

我该怎么做? Ammonite 的回答也很好,但我很乐意在原版 REPL 中这样做。

您可以使用 REPL 提供的默认变量名称(以 resN 开头),请参见下面的示例

scala> case class Bar(name: String)
defined class Bar

scala> Bar(name = "American Football")
res0: Bar = Bar(American Football)

你可以看到Bar实例提供了一个变量res0

scala> res0.name
res1: String = American Football

scala> val myBar = res0
myBar: Bar = Bar(American Football)

另见 - How can I access the last result in Scala REPL?

只是一个旁注,如果您想列出变量可能会有帮助

REPL刚启动时,

scala> $intp.unqualifiedIds
res0: List[String] = List($intp)

如上例定义classes/variables后;

scala> $intp.unqualifiedIds
res3: List[String] = List($intp, Bar, Bar, myBar, res0, res1, res2)