Polystate:构建带高阶状态的类型安全有限状态机
- 添加到项目中:在项目根目录运行
zig fetch --save git+https://github.com/sdzx-1/polystate.git
下载并添加依赖,在build.zig
中检索依赖,将其模块添加到模块导入中,然后就可以在模块代码中导入Polystate
。 基本用法:
- 构建一个简单的状态机,用于将包含下划线的字符串中的单词大写。状态机包含
FindWord
、CheckWord
和Capitalize
三个状态,通过handler
函数执行状态逻辑并确定转换。 - 每个状态由一个标记联合表示,包含字段和
handler
函数。字段表示状态的转换,类型由ps.FSM
生成,handler
函数接收上下文参数并返回转换。 - 使用
ps.Runner
创建运行器,传入起始状态,通过runHandler
运行状态机,直到到达特殊的ps.Exit
状态。
- 构建一个简单的状态机,用于将包含下划线的字符串中的单词大写。状态机包含
- 可暂停状态机:将状态机的模式设置为
suspendable
,允许暂停执行,在转换时需要告知状态机是否暂停。更新CapsFsm
包装器以接受ps.Method
参数,current
表示继续执行,next
表示暂停执行。在runHandler
中使用循环,根据返回值决定是否继续运行。 高阶状态和可组合性:
- 高阶状态是一个接受状态作为参数并返回新状态的函数,类似于 Zig 中的泛型。
- 通过创建
Words
实用工具,提供多个状态函数,用于构建单词操作。Words
本身由一个泛型函数生成,可在任何状态机中使用,并可以创建多个独立的实例。 - 在新的状态机中,使用
Words
实现了对两个字符串的不同单词处理操作,如大写包含下划线或回文的单词,反转包含元音的单词。
通过这些功能,Polystate 提供了一种方便的方式来构建和管理有限状态机,实现复杂的状态转换逻辑。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。