Scala表达式
.3.+(5)
正如我所料,在Ammonite-REPL中评估为5.3
。但是,在Scala REPL中,它会产生语法错误,打印
scala> .3.+(5)
<console>:1: error: ';' expected but double literal found.
$intp.3.+(5)
^
直观地说,.3.+(5)
对我来说似乎是一个有效的表达方式。 Ammonite中是否有错误或Scala REPL中有错误?
答案 0 :(得分: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文档中找不到任何内容,或者尝试一下,表明它支持此功能。也就是说,亚扪人不支持我上面粘贴的例子,这可能是做事情不那么混乱的方式。
答案 1 :(得分:2)
当您在常规Scala REPL中启动带有.
的表达式时,它会尝试解释它,就像您尝试在先前的评估结果上调用方法一样。
因此,当您编写.3.+(5)
时,REPL认为您的意思是resX.3.+(5)
,而resX
是REPL返回的最后结果。