是否可以使用Akka FSM事件功能匹配单个案例/事件中的多个消息。意思是我想将两个事件合并为一个事件。
case Event(response : GoodResponse, session:CustomerSession) =>
case Event(response : Timeout, session:CustomerSession) =>
case Event(response : Rejected, session:CustomerSession) =>
变得像
case Event(response : GoodResponse, session:CustomerSession) =>
case Event(response : Timeout || response : Rejected , session:CustomerSession) =>
两种错误情况都会调用相同的处理函数并返回相同的结果,因此我更愿意通过事件处理来宣传这一事实
答案 0 :(得分:6)
您可以让Timeout
和Rejected
在该特征上实现相同的特性和匹配。
如果在评论中写入时无法更改Timeout和Rejected的类型/实现,则可以使用仅忽略类型的案例。如果您之前处理过所有其他案件,这应该有效。我看起来像
case Event(response : GoodResponse, session:CustomerSession) =>
case Event(response : _, session:CustomerSession) =>
我不确定我的_语法是否合适,但是这一行应该有效。
答案 1 :(得分:1)
另一种选择是定义这样的自定义提取器:
object RejectedOrTimeout{
def unapply(value:Any) = {
if (value.isInstanceOf[Rejected] || value.isInstanceOf[Timeout]) Some(value)
else None
}
}
然后在匹配语句中使用它,如下所示:
case Event(RejectedOrTimeout(response), session:CustomerSession) =>