我正在阅读此tutorial,并在底部说明
因为如果不加选择地使用隐式转换可能会有陷阱,编译器会在编译隐式转换定义时发出警告。要关闭警告,请执行以下任一操作:将scala.language.implicitConversions导入隐式转换定义的范围...
如果使用隐式val而不是隐式def,则不会抛出警告。那是为什么?
换句话说,如果我执行以下操作,我就不需要导入:
implicit val int2str = (i: Int) => i.toString
但如果我执行以下操作,我确实需要导入:
implicit def int2str(i: Int) = i.toString
- - - - - - - - 更新 这是一个玩具示例,表明隐式val有效:
case class CoolString(coolString: String)
class RichCoolString(rich: CoolString) {
val hasCat: Boolean = rich.coolString.contains("cat")
}
object RichCoolString {
implicit val coolStringToRichCoolString = (coolString: CoolString) => new
RichCoolString(coolString)
}
scala> import RichCoolString._
import RichCoolString._
scala> CoolString("cool cats").hasCat
res0: Boolean = true