隐式转换适用于不需要的地方

时间:2019-07-08 12:27:02

标签: scala compiler-errors implicit-conversion scalac

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不会向我显示编写此表达式的任何错误,没有语法突出显示。

测试

  • 的Scala 2.11.8
  • Scala 2.13.0

0 个答案:

没有答案