【发布时间】:2021-11-16 11:13:22
【问题描述】:
我正在构建一个实现,我想切换行为。如何在三种行为之间切换并返回?我的问题是我不知道更改行为的正确方法,然后在处理该消息后将其更改回主要行为。这个我试过了
def answerMachine: Behavior[Message] = Behaviors.setup{ context: ActorContext[Message] =>
Behaviors.receiveMessage{
case s@Behave =>
println("Am told to behave: changing like chameleon")
EchoMachine(s, Behaviors.same)
case Back() =>
println("Now am back")
Behaviors.same
}
}
def EchoMachine(firstMsg: Message, behav: Behavior[Message]): Behavior[Message] = Behaviors.setup{ context: ActorContext[Message] =>
Behaviors.receiveMessage {
case Back() =>
println("I have changed to EchoMachine..")
behav
case Behave =>
println("I am behaving oo")
behav
}
}
val system = ActorSystem(TypedConvo.answerMachine, "Machine")
system.ref ! Behave
system.ref ! Back()
当我发送 Back() 时,我预计 answerMachine 会收到消息,但即使在改变行为之后也是 EchoMachine。
谢谢。
【问题讨论】:
标签: scala akka akka-actor akka-typed