2016-08-04 73 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)