【发布时间】:2012-03-02 19:30:23
【问题描述】:
在 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))
))
我在元组的第二个参数上收到以下错误消息:
- 类型不匹配;找到:() => 布尔值 => 所需单位:() => 布尔值 => 单位
我不明白为什么。我必须做什么才能让Reactive trait 存储一组布尔条件函数,如果它们的条件函数返回 true,这些函数应该稍后执行。也许我要绕道而行?有没有更简单的方法?
【问题讨论】:
-
我相信 paulp 用括号消除了 2.10 上的类型。
标签: scala parameters functional-programming anonymous-function