В Scala у меня есть следующая черта:
trait Reactive {
type Condition = () => Boolean
type Reaction = (Condition) => Unit
var reactions = Map[Condition, Reaction]()
def addReaction(c: Condition, r: Reaction) { reactions += (c -> r) }
def addReactions(rs: List[Tuple2[Condition, Reaction]]) {
for(r <- rs) r match { case(condition, reaction) => addReaction(condition, reaction) }
}
def updateReactive() {
for(reaction <- reactions) reaction match {
case (c, r) => r(c)
}
}
}
, затем, когда я пытаюсь вызвать метод addReactions()
:
addReactions(List(
(() => UserInput.lastInput.isKeyHit('g'), () => (is: Boolean) => activateDevice(0))
))
, я получаю следующее сообщение об ошибке навторой аргумент кортежа:
- несоответствие типов;найдено: () => Boolean => Требуется единица измерения: () => Boolean => Единица измерения
Я не понимаю, почему.Что мне нужно сделать, чтобы черта Reactive
сохранила набор логически обусловленных функций, которые должны быть выполнены позже, если их функция условия возвращает true.Может быть, я иду в обход?Есть ли более простой подход?