Zakładając Mam hierarchii typu jak poniżej:Scala seq - przyjmować tylko elementów tego samego podtypu
trait Color
case class Red(r: String) extends Color
case class Green(g: String) extends Color
Czy jest możliwe aby utworzyć metodę, która akceptuje Seq[Color]
który zawiera elementy zarówno wszystkich Red
lub albo wszystkie Green
, ale nie obie jednocześnie?
Na przykład w poniższym kodzie:
def process[T](colors: Seq[T]) = colors.size
process(Seq(Red("a"), Green("g")))
co powinno [T]
być tak, że powyższe nie wpisać sprawdzić?
Edit
Oryginalny problem jest następujący: Staram się opracować API JSON dla zagnieżdżonych zapytań. I mają pochodzić z następującym wzorem:
trait QueryUnit
case class SimpleQuery(query: String, metadata: Metadata)
case class ComplexQuery(Map[String, Seq[SimpleQuery])
case class API(
query: Map[String, Seq[QueryUnit]]
)
Elementy mapa zostanie conjuctions (łączeniu), natomiast elementy Seq będzie alternatywy (ORS). Nie chcę mieszać Simple z ComplexQueries i planuję dopasować wzorzec w Seq [QueryUnit].
brzmi jak problemu] [XY (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) do mnie. Czy mógłbyś trochę rozwinąć problem? –
Pewnie, wystarczająco dobrze :) Będę aktualizował więcej informacji o moim oryginalnym wydaniu. – spyk
Zaktualizowany oryginalny problem – spyk