這裏是什麼,我想做一個簡單的例子:如何創建具有特徵的基於組件的消息處理系統?
abstract class Message()
case class FooMessage() extends Message
case class BarMessage() extends Message
//... other messages ...
trait Component
{
def handleMessage(msg: Message):Unit
}
trait ComponentType1 extends Component
{
abstract override def handleMessage(msg: FooMessage) = {
//handle foo, pass it up the chain
super.handleMessage(msg)
}
abstract override def handleMessage(msg: BarMessage) = {
//handle bar, pass it up the chain
super.handleMessage(msg)
}
}
//handles some other messages, also might handle the same messages as ComponentType1
trait ComponentType2 extends Component { .. }
然後,這些ComponentType
s爲混合在的一類,以形成完全由模塊化組件的對象。
我有一堆不同的Message
s和一堆不同的Component
s。
- 並非所有組件都處理所有消息類型。
- 多個組件可以處理相同的消息類型。
- 即使消息由另一個組件處理,組件消息也會逐級通過組件。
- 組件可以處理多個消息類型。
的問題是,因爲handleMessage
在Component
定義爲接受Message
,當我嘗試特殊化msg
參數它不能算作覆蓋。
我知道一個可能的解決方案是聲明一個大匹配語句的大方法handleMessage
,但是我希望在可能的情況下爲每個消息定義一個方法。
我認爲你要麼得到心靈扭曲型兩輪牛車或大比賽。爲什麼你不想使用部分功能?請注意,它們可以使用orElse方法輕鬆組合。 – CheatEx 2011-03-24 22:00:48
@CheatEx:我沒有說什麼不想使用部分函數。你會如何在這裏使用它們? – ryeguy 2011-03-25 00:23:27
有關使用部分函數的示例,請參見下文。 – sourcedelica 2011-03-25 04:20:30