为什么在scala方法调用上围绕int括号

时间:2014-01-12 21:54:46

标签: scala

我正在阅读Scala教程,它解释说所有运算符实际上都是方法调用。所以1 * 2确实是:

scala> (1).*(2)
res1: Int = 2

为了看看会发生什么,我跑了:

scala> 1.*(2)
warning: there were 1 deprecation warning(s); re-run with -deprecation for details
res2: Double = 2.0

所以我用弃用标志再次运行它,我得到:

scala> 1.*(2)
<console>:1: warning: This lexical syntax is deprecated.  From scala 2.11, a dot will only be considered part of a number if it is immediately followed by a digit.
       1.*(2)

有人可以向我解释这个警告,并向我解释一下scala> (1).*(2)中1号括号的用途是什么?

1 个答案:

答案 0 :(得分:21)

当你说1.*(2)时,你的意思是否含糊不清:

(1).*(2),导致Int

(1.)*(2),会产生一个Double,因为1.是有效的语法,意味着Double 1.0

Scala目前将其视为第二个,但由于正确的行为并不明显,因此它将从Scala 2.11开始改为将其视为第一个。 Scala警告你,它的行为会改变。