简写算术运算符在Scala中返回不同的结果 - EG:3 + 2!= 3. +(2)

Mar*_*ace 0 scala arithmetic-expressions operators

可能重复:
Scala运算符奇怪

我对Scala很新,我读到用这种语言,一切都是对象,很酷.另外,如果一个方法只有一个参数,那么我们可以省略'.' 和parentesis'()',没关系.

所以,如果我们采用以下Scala示例:3 + 2'3'和'2'是两个Int对象而'+'是一个方法,听起来不错.然后3 + 2只是简写3.+(2),这看起来很奇怪,但我仍然得到它.

现在让我们比较下面的代码块REPL:

scala> 3 + 2
res0: Int = 5

scala> 3.+(2)
res1: Double = 5.0
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么显式语法返回一段Double时间,速记返回Int

Rex*_*err 7

3.是一个Double.词法分析者首先到达那里.试试(3).+(2).

  • 是的,但请注意,如果你在Scala 2.10中键入`3.+(2)`,你会得到`警告:这个词法语法已被弃用.从scala 2.11开始,如果一个点后面紧跟一个数字,它将仅被视为数字的一部分 (3认同)