scala – 混合泛型类型

我想在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和String的常见超类型,即myTest中的F .因为V处于协变位置,你可以简单地修改它:

case class Value[+V](value: V)

转载注明原文:scala – 混合泛型类型 - 代码日志