在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))
))
我在元组的第二个参数上得到以下错误消息:
- 类型不匹配;发现:()=&gt;布尔值=&gt;所需单位:()=&gt;布尔值=&gt;单元
我不明白为什么。如果Reactive
特征存储了一组应该稍后执行的布尔条件函数,如果它们的条件函数返回true,我该怎么做呢?也许我会绕道而行?有没有更简单的方法?
答案 0 :(得分:4)
请尝试改写:
addReactions(List(
(() => UserInput.lastInput.isKeyHit('g'), condition => activateDevice(0))
))
() => (is: Boolean) => activateDevice(0)
是一个没有参数的函数,可以将函数从Boolean
返回到Unit
。 condition => activateDevice(0)
是一个函数,其中包含一个名为condition
的参数(其类型为() => Boolean
),并返回Unit
。