Супертип для скалярного запроса - PullRequest
1 голос
/ 25 мая 2011

Что такое супертип для всех запросов 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.

Я совершенно сбит с толку, поэтому, если я что-то пропустил, спросите.

1 Ответ

2 голосов
/ 25 мая 2011

Это не работает, потому что параметр типа для Projection является инвариантным, и для Projection[Product] он должен быть ковариантным, чтобы быть супертипом Projection[(Int,Int)].Таким образом, Query[Projection[Product]] не является супертипом Query[Projection[(Int,Int)]], что является причиной, по которой компилятор жалуется.

Все ясно?Если нет, прочитайте об инвариантности и ковариации в википедии и в справочнике Scala.

Тип всех запросов проекций X, где X является подтипом продукта, равен Query[Projection[X]] forSome { type X <: Product }.

...