Я хочу создать два пользовательских типа с ключевым словом type
и сделать их ковариантными по отношению к другому типу, чтобы я мог поместить их обоих в один список или карту и работать с ним посредством сопоставления с образцом, возможно ли это?
type Reaction
type Condition = () => Boolean
type ComplexReaction extends Reaction = (Condition) => Unit
type SimpleReaction extends Reaction = () => Unit
val map = Map[Condition, Reaction]
def addPair(c: Condition, a: Reaction) { map += (c -> a) }
def executeAll {
for(puffy <- map) puffy match {
case (c, a: ComplexReaction) => a(c)
case (c, a: SimpleReaction) => if(c) a()
}
}
но, конечно, такого рода конструкция type
недопустима в Scala.Есть ли способ получить аналогичный результат или мне нужно сделать две отдельные карты?