所有Scalaquery查询的超类型是什么?
据我所知,Query[Projection[Product]]
应该是它,例如:
Projection2[Int, Int]
<: Projection[Tuple2[Int,Int]]
<: Projection[Product]
因此val query: Query[Projection[Product]] = for (all <- Tab) yield all.*
适用于Tab = new Table[(Int, Int)] {…}
...但显然我不明白scala中的输入是如何工作的。
我很困惑,所以如果我错过了什么,请问。
答案 0 :(得分:2)
这不起作用,因为Projection的类型参数是不变的,并且Projection[Product]
需要协变才能成为Projection[(Int,Int)]
的超类型。因此Query[Projection[Product]]
不是Query[Projection[(Int,Int)]]
的超类型,这就是编译器抱怨的原因。
一切都清楚了吗?如果没有,请阅读维基百科和Scala参考中的不变性和协方差。
X的所有投影查询的类型,其中X是Product的子类型,是Query[Projection[X]] forSome { type X <: Product }
。