2014-11-20 14 views
6

Scala scheint wie Java zu verhalten, wenn es um die magische Umwandlung von Primitiven kommt:Wie alle implizite Konvertierung von primitiven Typen zu deaktivieren?

val a: Int = 1 
val b: Double = 2.3 
println(a + b) // 3.3 
println(Math.max(a, b)) // 2.3 

Mehr als oft nicht, ist dies eine Quelle für Fehler in meinem Code ist. Gibt es eine Möglichkeit, diese impliziten Konvertierungen zu deaktivieren, so dass mein Beispiel eine Kompilierung als Warnung/Fehler enthält? Ich würde wirklich lieber

print(a.toDouble + b) 
println(Math.max(a.toDouble, b)) 

jedes Mal schreiben, wenn ich solche Umwandlungen benötige.

Antwort

5

Verwenden Sie WartRemover. Eine solche Warze ist nicht eingebaut, könnte aber geschrieben werden (siehe "Warzenregeln schreiben" in der README). Obwohl ich denke, es ist wahrscheinlich mehr Arbeit, als ich anfangs dachte.

scalac hat auch -Ywarn-numeric-widen Option (zusammen mit -Xfatal-warnings, um die Warnungen zu Fehlern), aber ich weiß nicht, ob es Fälle gibt, die nicht von ihm abgedeckt werden.

+2

Sie können auch '-Yno-predef' verwenden, um einige Implicits zu deaktivieren. Allgemeiner, siehe http://tpolecat.github.io/2014/04/11/scala-flags.html – lmm

+0

Vielen Dank an Sie beide. Dieser Artikel auf scalac-flags ist golden <3 – OlivierBlanvillain

Verwandte Themen