问题标签 [state-machine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
12479 浏览

programming-languages - 有没有内置状态机结构的编程语言?

我只是好奇是否有一种以状态机(类似于 boost::statechart)作为主要语言结构的编程语言。

类比 - c# 有委托,其中 java 使用观察者模式,而 C 有回调。Perl 和 python 具有内置哈希,而 C++ 和 java 需要一个库。

更新:

这应该是 C++、C#、Java、Lisp 意义上的通用编程语言......

我的意思是“成熟的”状态机,在 Harel 形式主义或 UML 状态图或 boost::statechart 级别上具有所有的花里胡哨。

0 投票
3 回答
406 浏览

recursion - 状态终结/初始化活动仅在叶状态上运行

我正在尝试让我的 Windows 状态机工作流程与最终用户进行通信。我试图在 StateActivity 中实现的一般模式是:

StateInitializationActivity:向用户发送请求回答问题的消息(例如“您批准此文档吗?”),以及...的上下文...
...EventDrivenActivity:处理用户发送的答案
StateFinalizationActivity:取消消息(例如文件被撤回,不再需要批准)

如果 StateActivity 是“叶状态”(即没有子状态),这一切都可以正常工作。但是,如果我想使用状态的递归组合,它就不起作用。对于非叶状态,StateInitialization 和 StateFinalization 不会运行(我通过使用 Reflector 检查 StateActivity 源代码确认了这种行为)。EventDrivenActivity 仍在监听,但最终用户不知道发生了什么。

对于 StateInitialization,我认为解决此问题的一种方法是将其替换为 EventDrivenActivity 和零延迟计时器。我对如何处理 StateFinalization 感到困惑。

那么 - 是否有人对如何让状态最终确定活动始终运行有任何想法,即使对于非叶状态也是如此?

0 投票
1 回答
643 浏览

qt - QState 的所有权。我需要删除所有 QStates 吗?

我将我的状态添加到 m。此代码将删除 mystate?

0 投票
2 回答
2618 浏览

state-machine - 有限状态机可以转换到以前的状态吗?

我知道 FSM 可以转换到下一个状态,甚至可以转换到当前状态,即转换到自身的状态,但是状态转换到前一个状态(状态 C 转换到状态 B)是否合法?

0 投票
6 回答
600 浏览

c++ - 向类 C++ 语言添加状态机支持的提议

最近,作为我日常工作的一部分,我一直在学习 IBM Rhapsody 并使用它从 UML 生成 C++ 代码。

昨天让我感到震惊的是,考虑为我的 C++ 编译器添加状态机支持可能很酷,所以我在这里记下了一些笔记:http: //ellcc.org/wiki/index.php/State_machines_and_Active_Classes

我这样做的动机是:

  1. 这似乎是一个很酷的主意。
  2. 与当前的 Rhapsody/普通 C++ 编译器相比,该编译器可以进行更好的语义检查(具有更好的错误检查)。
  3. 当编译器本身理解状态机结构时,有许多优化可能性可用。

我可能会尝试将我的语法扩展到除提案之类的内容之外,看看它的效果如何。

您对该提案有何看法?它看起来可读吗?看起来值得吗?


编辑:

感谢您推荐特定库来执行状态机的答案,但这不是我的问题。我已经使用我编写的库和代码实现了许多状态机。

我真的在寻找关于将状态机扩展设计为类 C++ 语言的想法、批评等,而不是这种更改是否适合添加到标准 C++ 中。将其视为特定于域的扩展,我的域是实时控制应用程序。

我已经开始在我的编译器中实现扩展,如下所述:http: //ellcc.org/wiki/index.php/State%5Fmachines%5Fand%5FActive%5FClasses

到目前为止,从提案到实施,这个概念没有太大变化,但在细节上发生了一些变化,我正在完善我对问题语义的理解。

然而,时间会证明整个概念是否有价值。;-)

0 投票
2 回答
273 浏览

c++ - 关于状态机优化和代码生成的参考资料?

作为我的状态机作为类 C++ 语言扩展问题的后续行动,我需要更多帮助。

我的编译器已扩展为解析我的状态机扩展,现在我开始进行语义分析和代码生成。此页面上有说明。

谁能指出我关于状态机优化和代码生成的良好参考?


编辑:

我还没有找到任何具体的参考资料,但这是一个我不知道的有趣项目:http: //echarts.org/

他们正在用 Java 语法做一些与我正在尝试做的事情非常相似的事情。显然这个项目起源于 AT&T: http ://www.research.att.com/software_tools

0 投票
4 回答
954 浏览

c - 任意数字计数器

我需要一个计数器算法,它使用任意给定的数字进行计数。

我的代码与此类似:

我的预期输出:

如您所见,我需要算法来实现get_next()功能,所以使用 C 语言不是重点。

为澄清起见,编辑 I:

我的 get_next() 函数可能与此类似:

请注意,对生成下一个数字的函数使用get_next(void)ornext(previous_number)next(digits, previous_number)原型对我来说并不重要。

编辑二为澄清目的:

与上面的简单示例相比,我的真实场景更加复杂,我需要一个适用于任意数量任意数字的通用解决方案。

数字输入示例:

0 投票
1 回答
290 浏览

testing - 基于状态的测试(状态图)和转换序列

我真的被一些基于状态的测试概念所困扰......

我正在尝试计算一些检查序列,这些检查序列将涵盖每个状态的所有转换,我有答案,但我不明白:

替代文字 http://www.gam3r.co.uk/1m.jpg

现在我的答案是:

替代文字 http://www.gam3r.co.uk/2m.jpg

我完全不明白。例如,假设我们要检查 s1 中的转换 a/x,我们不会只做 ab 吗?由于我们已经在 s1 中,我们执行 a/x 来测试到 s2 的转换,然后执行 b 来检查我们是否处于之前的正确状态(s1)?我不明白为什么它是 aba 甚至 s1 的 bb ......

任何人都可以告诉我吗?

谢谢

0 投票
2 回答
299 浏览

structuremap - 如何使用结构图正确实现状态机/工厂?

可以说我有一个传统的状态机/工厂,如

但现在我想使用最佳实践(TDD、SOLID ...)和结构图来实现这一点。

为了遵循单一职责原则,我想将每个状态的处理代码放在单独的类中。此外,每个类都有自己的一组独特的依赖项,它们本身可能非常复杂。所以我认为把它们放在不同的班级是个好主意。

那么,我怎样才能在 Structuremap 中正确地做到这一点?

我知道这基本上是一个工厂类,我想将其转换为 Objectfactory。

我正在使用最新的 Structuremap 版本 2.54,在这个版本中,很多东西似乎已被弃用(或不再推荐),比如 ForRequestedType 的使用。所以我正在寻找使用新符号的正确方法。

0 投票
2 回答
5115 浏览

ruby-on-rails - 使用 AASM 状态机处理 Rails 错误

我正在使用ruby​​ist-aasm状态机来处理我的 Event 对象中的不同状态(事件初始化、事件讨论、事件发布等)。我添加了守卫以防止在不满足某些条件时更改状态。

这一切都很好,但是当警卫拒绝状态更改时,它不会显示任何错误。知道我怎么能看到状态没有改变吗?我可以手动检查状态,但这听起来像一个丑陋的解决方案。