考慮以下兩個特點:在阿卡撰寫Scala的特質行爲收到方法
trait Poked extends Actor {
override def receive = {
case Poke(port, x) => ReceivePoke(port, x)
}
def ReceivePoke(port: String, x: Any)
}
trait Peeked extends Actor {
override def receive = {
case Peek(port) => ReceivePeek(port)
}
def ReceivePeek(port: String)
}
現在考慮我可以創造一個實現兩個性狀的新演員:
val peekedpoked = actorRef(new Actor extends Poked with Peeked)
如何撰寫了接收處理程序?即,接收器應該是類似下面的代碼,雖然「自動產生」(即,所有的性狀應該組成):
def receive = (Poked.receive: Receive) orElse (Peeked.receive: Receive) orElse ...
這是非常有趣的,謝謝你:-)但它假定一個類型IntOrString這既是一個int和一個字符串的前生,而IntOrString知道應該撰寫那些(如果我正在構建一個框架,另一個可能會忽略)。是不是可以使IntActor和StringActor特徵自動組成? – 2011-12-30 20:19:33
順序是由混合的特徵線性化給出的,因此「可預測的」;-)並且使用預先匹配匹配重寫後面的特徵。早些時候,所以我認爲你的解決方案非常好! – 2011-12-31 11:53:41
優秀的scala-fu顯示! :-) – 2011-12-31 12:32:20