我正在阅读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号括号的用途是什么?
答案 0 :(得分:21)
当你说1.*(2)
时,你的意思是否含糊不清:
(1).*(2)
,导致Int
或
(1.)*(2)
,会产生一个Double,因为1.
是有效的语法,意味着Double 1.0
Scala目前将其视为第二个,但由于正确的行为并不明显,因此它将从Scala 2.11开始改为将其视为第一个。 Scala警告你,它的行为会改变。