gpt4 book ai didi

scala - 这是一种在 Akka FSM 中内部监视到第一个状态的转换的方法吗?

转载 作者:行者123 更新时间:2023-12-02 00:12:34 24 4
gpt4 key购买 nike

考虑从空闲状态开始的 FSM actor

startWith(Idle, IdleData)

我想监视到第一个状态的转换(从无状态?)

我试过了

onTransition {
case _ -> Idle => // Wasn't called
}

根据相关FSM文档:

It is also possible to pass a function object accepting two states to onTransition, in case your transition handling logic is implemented as a method:

onTransition(handler _)

def handler(from: StateType, to: StateType) {
// handle it here ...
}

鉴于 from 类型是 StateType 而不是 Option[StateType] 我认为这可能不可能,但也许我遗漏了一些东西。

最佳答案

我最近正在寻找类似的东西。

如果我正确理解你的问题,这是一种监控何时从初始状态启动 FSM 的方法:

class ExampleFSM extends Actor with FSM[State, Data] {
// A FSM begins its existence in Idle state and can move to different states
startWith(Idle, NoData)

when(Idle) {
case Event(SetData(something), NoData) =>
goto(SomeOtherState) using Data(something)
}

onTransition {
case Idle -> Idle =>
stateData match {
case _ =>
println("Initial transition")
}
}
}

在上面的例子中,当我们实例化 FSM 传入消息 SetData(something) 时,它会从状态 Idle 开始,并且有一个转换,您可以可以监控哪个是Idle -> Idle

在上述情况下,当我们启动 FSM 时,我们可以看到打印的输出初始转换,您可以根据您的需要利用它来做更复杂的事情

所以基本上,如果您将现有的转换从 case _ => Idle 更新为 case Idle -> Idle ,它应该可以工作

注意:可能有不止一种方法可以做到这一点,我还在探索 Akka FSM 的强大功能,所以我的答案只是有一种可能的方法来实现这一点。

关于scala - 这是一种在 Akka FSM 中内部监视到第一个状态的转换的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com