2016-08-23 37 views
0

我有以下類:如何將PartialFunction與另一個函數結合並返回PartialFunction?

class MessageProcessorActor(private val destination : ActorRef) extends Actor{ 
    override def receive: Receive = { 
    case _ => 
    destination ! { 
     case MyActor.TracableMessage(msg) => MyActor.TracableMessage("Processed + " + msg) 
     case MyActor.Message(msg) => MyActor.Message("Processed + " + msg) 
     case _ => "Processed + " + _ 
    }(_) 
    } 
} 

object MyActor{ 
    case class TracableMessage(private val msg: String) extends Message(msg) 
    case class Message(private val msg: String) 
} 

凡爲

type Receive = PartialFunction[Any, Unit] 

在這裏,我試圖避免宣佈val拿着PartialFunction[Any, Any]並調用它這樣Recieve定義。但編譯器拒絕此代碼。它打印:

Error:(12, 6) ';' expected but '(' found. 
    }(_) 
    ^

是否有一個簡短的方法來做這樣的事情?

回答

1

你爲什麼試圖這樣寫?跟着怎麼了

class MessageProcessorActor(private val destination : ActorRef) extends Actor{ 
    override def receive: Receive = { 
    case MyActor.TracableMessage(msg) => { 
     destination ! MyActor.TracableMessage("Processed + " + msg) 
    } 
    case MyActor.Message(msg) => { 
     destination ! MyActor.Message("Processed + " + msg) 
    } 
    case _ => { 
     destination ! "Processed + " + _ 
    } 
    } 
} 

object MyActor{ 
    case class TracableMessage(private val msg: String) extends Message(msg) 
    case class Message(private val msg: String) 
} 
+0

是的,它確實有效,但我試圖避免多個'目的地! msg'表達。並只寫一次(而不是三次)。 – user3663882

+0

會有什麼好處? –

相關問題