【发布时间】:2012-04-22 22:09:09
【问题描述】:
trait A extends Actor {
private val s = Set[Int]()
override def act() {
loop {
react {
// case code that modifies s
}
}
}
}
trait B extends Actor {
private val t = Set[String]()
override def act() {
loop {
react {
// case code that modifies t
}
}
}
}
val c = new C with A with B //...?
我真正想要的是某种 B.act() and C.act() 的自动组合,但使用 trait mix-ins,只会调用 B.act()。有没有简单的方法可以做到这一点?
编辑:这是我找到的half-solution。我说“一半”是因为原始特征不再扩展Actor,并且需要将C with A with B 定义为一个类,而不是动态混入。也许我应该称之为“四分之一解决方案”?
【问题讨论】:
-
A和B都可以收到消息吗? -
当然,为什么不呢?我想出的解决方案可以解决这个问题——如果
A和B都有消息的案例处理程序,那么稍后混合的特征优先于解决。 (其实我需要把reduce改成reduceLeft。) -
其实,我想我可能误解了你的问题。虽然
A和B可以 都为消息定义了一个案例处理程序,但只有其中一个会实际执行。但是,您确实可以控制要解决的问题。
标签: scala inheritance actor mixins traits