斯卡拉:PartialFunction
问题描述:
我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()
,但我想知道这是怎么可能的)
答
调用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)