Scala在不需要的地方应用隐式转换,并使编译失败并显示“类型不匹配”错误。
示例:
import scala.language.implicitConversions
case class Result(value: String)
implicit def intToResult(v: Int): Result = Result(v.toString)
val res: Result = Some(100).getOrElse(200/*wrong implicit intToResult call*/)
错误:
Error:(7, 46) type mismatch;
found : Any
required: Result
val res: Result = Some(100).getOrElse(200)
表达式Some(100).getOrElse(200)
应该返回一个Int
,scala应该使用Result
通过隐式转换将其转换为intToResult
。
但是Scala也将intToResult
隐式地应用于getOrElse
的超值编译。
IntelliJ不会向我显示编写此表达式的任何错误,没有语法突出显示。
测试: