2017-06-26 6 views
1

Ich beginne gerade Scala, kommt aus Java.Scala implizite Art Casting

So weiß ich, dass in Scala, alle Dinge Objekte sind, und Scala entspricht den längsten Token (Quelle: http://www.scala-lang.org/docu/files/ScalaTutorial.pdf), so dass, wenn ich das richtig verstehen:

var b = 1.+(2) 

dann b ist ein Double, plus und Int , was in Java ein Double wäre. Aber wenn ich seinen Typ über println(b.isInstanceOf[Int]) überprüfe, sehe ich, dass es ein Int ist. Warum ist es kein Double wie in Java?

Antwort

3

Nach dem specification:

1. ist kein gültiger Gleitkomma wörtlichen weil die obligatorische Ziffer nach dem . fehlt.

Ich glaube, es ist wie das getan, genau da Ausdrücke wie 1.+(2) sollte (2) als Integer 1, Methodenaufruf ., Methodenname + und Methodenargument analysiert werden.

0

Der Compiler würde standardmäßig 1 und 2 als Ints behandeln. Du könntest entweder einen davon zu einem Double machen mit 1.toDouble Und das Ergebnis (b) wäre ein Double.

Btw - meinst du, schreiben Sie 1,0 + 2 - in diesem Fall b wäre ein Doppel?