Akka:FSM - 重用具有不同消息子类型的参与者
Akka: FSM - reuse actor with different subtype of message
假设我有以下消息:
trait Msg { def c: Int }
case class MsgType1(c: Int) extends Msg
case class MsgType2(c: Int) extends Msg
现在,我想为不同类型的 Msg 重用相同的 FSM actor,如下所示。在这种情况下,我们使用通用类型 Msg 作为消息类型。当我实例化这个演员时,我想以某种方式指示我想接收哪种类型的 Msg。
class ActorFSM1() extends FSM[s, Data] {
when(SomeState) {
case Event(msg: Msg, data: Data) =>
而不是复制如下代码:
class ActorFSM1() extends FSM[s, Data] {
when(SomeState) {
case Event(MsgType1(c), data: Data) =>
class ActorFSM2() extends FSM[s, Data] {
when(SomeState) {
case Event(MsgType2(c), data: Data) =>
这可能吗?
注意:我不想在同一个演员中有不同的案例陈述。他们应该是不同的参与者,碰巧接收到不同的 Msg 子类型。其余逻辑在不同实例之间是相同的。
class ActorFSM1[T<:Msg] extends FSM[s, Data] {
when(SomeState) {
case Event(msg: T, data: Data) =>
假设我有以下消息:
trait Msg { def c: Int }
case class MsgType1(c: Int) extends Msg
case class MsgType2(c: Int) extends Msg
现在,我想为不同类型的 Msg 重用相同的 FSM actor,如下所示。在这种情况下,我们使用通用类型 Msg 作为消息类型。当我实例化这个演员时,我想以某种方式指示我想接收哪种类型的 Msg。
class ActorFSM1() extends FSM[s, Data] {
when(SomeState) {
case Event(msg: Msg, data: Data) =>
而不是复制如下代码:
class ActorFSM1() extends FSM[s, Data] {
when(SomeState) {
case Event(MsgType1(c), data: Data) =>
class ActorFSM2() extends FSM[s, Data] {
when(SomeState) {
case Event(MsgType2(c), data: Data) =>
这可能吗? 注意:我不想在同一个演员中有不同的案例陈述。他们应该是不同的参与者,碰巧接收到不同的 Msg 子类型。其余逻辑在不同实例之间是相同的。
class ActorFSM1[T<:Msg] extends FSM[s, Data] {
when(SomeState) {
case Event(msg: T, data: Data) =>