2014-01-12 4 views
7

Ich gehe durch ein Scala-Tutorial, und es erklärt, dass alle Operatoren tatsächlich Methodenaufrufe sind. So 1 * 2 ist wirklich:Warum Klammern um int auf einem Aufruf der Scala-Methode

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

Nur um zu sehen, was passieren würde, ich lief:

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

So betreibe ich es wieder mit dem deprecation Flagge und ich:

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) 

Could jemand bitte erkläre mir diese Warnung, und erkläre mir auch welchen Zweck die Klammern um die 1 in scala> (1).*(2) erfüllen?

Antwort

21

Wenn Sie 1.*(2) sagen ist es nicht eindeutig, ob Sie nach:

(1).*(2), die

in einer Int-Ergebnisse

oder

(1.)*(2), die in einem Doppel führt, da 1. gilt Syntax Bedeutung das Doppel 1.0

Scala behandelt es derzeit als das zweite, aber da das richtige Verhalten nicht offensichtlich ist, wird es Ich wechsle von Scala 2.11 ab, um sie wie die erste zu behandeln. Scala warnt dich, dass sich sein Verhalten ändern wird.

Verwandte Themen