我想在我的 中混合通用类型myTest
case class CC(i:Int, s:String, s2:String)
case class Value[V](value: V)
def myTest[F](values: (CC ⇒ Value[F])*) = Unit
class QF[M](x: M) {
def eqs(v: M) = Value(x)
}
implicit def conversion[V](v: V): QF[V] = new QF(v)
myTest(_.i eqs 1)
myTest(_.s eqs "lol")
myTest(_.s eqs "lol", _.s2 eqs "lol2")
直到那时它都有效,但我认为当我尝试混合类型时会出现协方差错误。
当我做 :
myTest(_.i eqs 1, _.s eqs "lol")
我收到以下错误:
Error:(16, 13) type mismatch;
found : A$A135.this.CC => A$A135.this.Value[Int]
required: A$A135.this.CC => A$A135.this.Value[Any]
myTest(_.i eqs 1, _.s eqs "lol");}
^
最佳答案
对,那是正确的。因为 Value
在 V
中定义为不变量, 表示 Value[Int]
和 Value[String]
不是 Value[Any]
的子类型,但是 Any
是Int
最接近的普通父类(super class)型和 String
,即 F
在 myTest
.因为 V
处于协变位置,您可以简单地修改它:
case class Value[+V](value: V)
关于scala - 混合泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31960704/