2016-08-04 69 views
1

Akka演員系統得到的結果有一定的測試,以驗證消息內容斯卡拉:PartialFunction

myEventActor.expectMsgPF() { 
    verifyEventPF(id) 
} 

def verifyEventPF(id: String): PartialFunction[Any, Any] = { 
    case e : MyEvent if e.id == id => e.otherID 
} 

例如,我們用這個部分功能檢查對事件ID是正確的。 但我該如何去獲取部分函數的結果,例如如果我想達到以下效果

myEventActor.expectMsgPF() { 
    var otherID = verifyEventPF(id) // How do I achieve this? 
} 

這可能嗎?

(我知道我不需要在這裏使用的部分功能,並可以使用Akka TestProbe.receiveOne(),但我想知道這是怎麼可能的)

回答

2

調用verfiyEventPF(id)回報PartialFunction[Any, Any]。你還必須調用返回的函數(當然要給它輸入):verifyEventPF(id)(event)

這是一樣的如下:

val getId: PartialFunction[Any, Any] = verifyEventPF(id) 
getId(event) 

如果你擔心不被特定輸入定義的部分功能可按,你可以檢查功能對一個給定的值來定義:

if (getId.isDefinedAt(event)) { 
    getId(event) 
} 

或者你也可以解除部分功能成返回Option總共功能:

val totalGetId: (Any => Option[Any]) = getId.lift 
val result: Option[Any] = totalGetId(event)