kommt es vor, über einen anderen Mechanismus, einzigartig für die numerischen Typen, genannt numerische Erweiterung.
SLS 6.26.1 Value Conversions sagt:
Die folgenden fünf impliziten Konvertierungen können auf einen Ausdruck e, die einen Wert Typ T hat angewendet werden, und die mit einem gewissen erwarteten Typ pt-Typ-geprüft.
Static Overloading Auflösung
Typ Instanziierung
Numerische Widening
Zahlenliteral Eingrenzen
Wert Wegwerfen
View-Anwendung
Dynamische Mitglied Selec tion
(Okay, das ist mehr als fünf .... nicht sicher, warum :)
Der eine von Interesse ist numerische Erweiterung:
Wenn e eine primitive Zahlentyp hat Die weakly conforms auf den erwarteten Typ, es ist auf den erwarteten Typ mit einem der numerischen Konvertierungsmethoden toShort
, , toInt
, toLong
, toFloat
, toDouble
definierterweitert.
3.5.16 Weak Conformance sagt
In einigen Situationen Scala verwendet eine allgemeinere Konformität Beziehung. Ein Typ S entspricht schwach einem Typ T, geschrieben S <: wT, wenn S <: T oder beide S und T primitive Zahlentypen sind und S in der folgenden Reihenfolge T vorausgeht.
Byte <:w Short
Short <:w Int
Char <:w Int
Int <:w Long
Long <:w Float
Float <:w Double
So println(i.total)
wird println(i.total.toFloat)
weil Int <:w <: Long <: Float
.
Java (und C# und viele andere Sprachen) haben numerische Erweiterungen, und Scala entschied sich dafür, es zu behalten.
Beachten Sie, dass das Gegenteil nicht funktioniert: a Float
kann nicht implizit in Int
über diesen Weg konvertiert werden, da Größe verloren gehen könnte; es ist keine "Erweiterung". Sie können -Ywarn-numeric-widen
hinzufügen und eine Warnung erhalten, wenn dies passiert
Erweiterung Konvertierungen unterscheiden sich von impliziten Konvertierungen: https://developmentality.wordpress.com/2011/01/24/scala-type-inferencing-gotchas/ –
In der Sprachreferenz kann schwache Übereinstimmung helfen zu verstehen (diese sind nicht implizit Konvertierungen): http://www.scala-lang.org/files/archive/spec/2.11/03-types.html#weak-conformance und diese Frage: http://stackoverflow.com/q/3094380 –