我在使用类型系统挣扎。我得到一个:在该行“错误类型不匹配”Scala:错误类型不匹配
handler.addJob(job1)
它说found "MessageEvent" required "Event"
我想我需要以某种方式改变addJob
方法在任何Job
传递与延伸Event
但我一个类型无法弄清楚如何做到这一点。
还行
var jobs = List[Job[Event]]()
或许应该采取与工作的Event
一个亚型,但再次我不知道该怎么做。任何帮助表示赞赏。
-Eric
class EventHandler {
var jobs = List[Job[Event]]()
def receive(event: Event) {
jobs.foreach {
_.processEvent(event)
}
}
def addJob(job: Job[Event]) {
jobs = job :: jobs
}
}
class Job[T <: Event] {
var steps = List[(T => Unit)]()
def addStep(step: (T => Unit)) {
steps = step :: steps
}
def processEvent(event: T): Boolean = {
steps.foreach(_.apply(event))
return true
}
}
class AppTest {
def testApp {
val handler = new EventHandler()
val job1 = new Job[MessageEvent]
job1.addStep {
println(_)
}
handler.addJob(job1)
handler.receive(new MessageEvent(new Message()))
}
}
非常感谢您的帮助Alexey! – user721102 2011-04-22 21:50:04
如果您喜欢答案,您应该对其进行投票(请参阅常见问题解答,“我如何在此提问?”)。 – 2011-04-23 06:11:39