2

斯卡拉表达式

.3.+(5)

5.3正如我所料,在 Ammonite-REPL 中计算结果为。但是,在 Scala REPL 中,它会产生语法错误,打印

scala> .3.+(5)
<console>:1: error: ';' expected but double literal found.
       $intp.3.+(5)
            ^

直觉上,.3.+(5)这对我来说似乎是一个有效的表达方式。Ammonite 中有错误还是 Scala REPL 中有错误?

4

2 回答 2

4

该特定表达式在 Scala REPL 中不起作用,因为它具有允许您在输出的最后一个表达式上调用方法的功能。REPL 会话中的最后一个表达式必须已命名$intp。此功能通常像这样使用:

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

scala> .map(_ + 1)
res15: List[Int] = List(2, 3, 4, 5)

在您的情况下,Scala REPL 认为您正在尝试调用.3在最后一个输出中命名的方法。我在 Ammonite 文档中找不到任何内容,也无法通过尝试找到任何表明它支持此功能的内容。也就是说,Ammonite 不支持我上面粘贴的示例,这可能是一种不太容易混淆的做事方式。

于 2017-03-05T16:28:15.810 回答
2

当您在常规 Scala REPL 中以 a 开始表达式时.,它会尝试将其解释为就好像您尝试在先前的评估结果上调用方法一样。

因此,当您编写.3.+(5)REPL 时,您认为您的意思resX.3.+(5)resXREPL 返回的最后一个结果是什么。

于 2017-03-05T16:27:46.893 回答