GitHub - sdzx-1/polystate:使用高阶状态构建类型安全的有限状态机。

Polystate:构建带高阶状态的类型安全有限状态机

  • 添加到项目中:在项目根目录运行zig fetch --save git+https://github.com/sdzx-1/polystate.git下载并添加依赖,在build.zig中检索依赖,将其模块添加到模块导入中,然后就可以在模块代码中导入Polystate
  • 基本用法

    • 构建一个简单的状态机,用于将包含下划线的字符串中的单词大写。状态机包含FindWordCheckWordCapitalize三个状态,通过handler函数执行状态逻辑并确定转换。
    • 每个状态由一个标记联合表示,包含字段和handler函数。字段表示状态的转换,类型由ps.FSM生成,handler函数接收上下文参数并返回转换。
    • 使用ps.Runner创建运行器,传入起始状态,通过runHandler运行状态机,直到到达特殊的ps.Exit状态。
  • 可暂停状态机:将状态机的模式设置为suspendable,允许暂停执行,在转换时需要告知状态机是否暂停。更新CapsFsm包装器以接受ps.Method参数,current表示继续执行,next表示暂停执行。在runHandler中使用循环,根据返回值决定是否继续运行。
  • 高阶状态和可组合性

    • 高阶状态是一个接受状态作为参数并返回新状态的函数,类似于 Zig 中的泛型。
    • 通过创建Words实用工具,提供多个状态函数,用于构建单词操作。Words本身由一个泛型函数生成,可在任何状态机中使用,并可以创建多个独立的实例。
    • 在新的状态机中,使用Words实现了对两个字符串的不同单词处理操作,如大写包含下划线或回文的单词,反转包含元音的单词。

通过这些功能,Polystate 提供了一种方便的方式来构建和管理有限状态机,实现复杂的状态转换逻辑。

阅读 16
0 条评论