如何禁用原始类型的所有隐式转换?

时间:2014-11-20 15:16:19

标签: scala numbers implicit-conversion

当谈到原语的神奇转换时,Scala似乎表现得像Java一样:

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

通常,这是我的代码中的错误来源。有没有办法禁用这些隐式转换,以便我的示例给出编译警告/错误?我真的宁愿写

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

我每次都需要这样的转换。

1 个答案:

答案 0 :(得分:5)

使用WartRemover。像这样的疣不是内置的,但可以编写(参见README中的“编写疣规则”)。虽然现在我认为,这可能比我最初的想法更多。

scalac还有-Ywarn-numeric-widen选项(与-Xfatal-warnings一起将警告变为错误),但我不知道是否有任何案例未被覆盖。