为什么不使用以下隐式方法?如何在作用域内有隐式的 Conversion[X,Y] 的情况下自动将X的实例转换为Y的实例?
为什么不应该使用以下隐式方法?如何能够在存在一个隐式转换Conversion [X,Y]的情况下,自动地将X的实例转换成Y的实例呢?
为什么不应该使用以下隐式方法?如何能够在存在一个隐式转换Conversion [X,Y]的情况下,自动地将X的实例转换成Y的实例呢?
trait Conversion[X, Y] {
def apply(x: X): Y
}
implicit object Str2IntConversion extends Conversion[String, Int] {
def apply(s: String): Int = s.size
}
implicit def convert[X, Y](x: X)(implicit c: Conversion[X, Y]): Y = c(x)
val s = "Hello"
val i1: Int = convert(s)
val i2: Int = s // type mismatch; found: String required: Int
String
转换成Int
的隐式转换,例如implicitly[String => Int]
,但这并不存在。问题在于Y
是一个参数,Scala 不会自动将其替换为你所寻找的类型。例如,implicit def convert[X](x: X)(implicit c: Conversion[X, Int]): Int = c(x)
将可行。 - 0__