Я хочу сделать два пользовательских типа с ключевым словом type
и сделать их ковариантными для какого-либо другого типа, чтобы я мог разместить их как в одном списке, так и в карте и работать с ним с помощью сопоставления с образцом, это возможно?Scala - создавать пользовательские типы covariant
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. Есть ли способ добиться аналогичного результата или мне нужно сделать две отдельные карты?
Сделать тривиальную иерархию случая класса вместо просто введите синонимы. –
А, да, и используйте специальный метод 'apply' правильно? Я попробую это. – noncom
Нет, Scala не понимает, что класс с одним методом apply() может быть создан как '() => doSomething()' ... Как печально ... – noncom