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()
ののいくつかの並べ替えですが、形質ミックスインで、唯一B.act()
が呼び出されます。これを達成する簡単な方法はありますか?複数の形質ミックスインの問題と俳優
編集:ここにはhalf-solutionが見つかりました。元の特性がもはやActor
に拡張されず、C with A with B
が動的ミキシンインではなくクラスとして定義される必要があるため、私は「半分」と言う。多分私はそれを「四半期解決策」と呼ぶべきでしょうか?
はメッセージが 'A'と 'B'の両方によって受信されることができますか? – paradigmatic
もちろん、どうしてですか?私が考案した解決法は、これを処理します。もし 'A'と' B'の両方がメッセージのためのcaseハンドラを持っていれば、後で混合される特性が解決に優先します。 (実際には、reduceをreduceLeftに変更する必要がありました。) –
実際、私はあなたの質問を誤解している可能性があります。 'A'と' B' **は両方ともメッセージのケースハンドラを定義できますが、実際にはそれらのうちの1つだけが実行されます。しかし、あなたは**あなたが解決したいものを制御できます**。 –