2014-11-20 12 views
6

Scala sembra comportarsi come Java quando si tratta di conversione magia delle primitive:Come disabilitare tutte le conversioni implicite di tipi primitivi?

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

Più spesso che no, questa è stata una fonte di errori nel mio codice. C'è un modo per disabilitare queste conversioni implicite in modo che il mio esempio fornisca un avviso/errore di compilazione? Preferirei davvero scrivere

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

ogni volta che ho bisogno di tali conversioni.

risposta

5

Utilizzare WartRemover. Una verruca come quella non è built-in, ma potrebbe essere scritta (vedi "Scrittura di regole di verruca" in README). Anche se ora penso, probabilmente è più lavoro di quanto pensassi inizialmente.

scalac ha anche l'opzione -Ywarn-numeric-widen (insieme a -Xfatal-warnings per trasformare gli avvisi in errori), ma non so se ci sono casi non coperti da esso.

+2

Si potrebbe anche voler '-Yno-predef' per disabilitare alcuni impliciti. Più in generale, vedi http://tpolecat.github.io/2014/04/11/scalac-flags.html – lmm

+0

Grazie a entrambi. Questo articolo su scalac-flags è d'oro <3 – OlivierBlanvillain

Problemi correlati