#state #closures #transition #manage #clearly

stator

在 Rust 中使用闭包清晰管理状态转换

2 个版本

使用旧的 Rust 2015

0.1.1 2015 年 7 月 27 日
0.1.0 2015 年 7 月 26 日

4#transitions

自定义许可证

6KB
130

stator

在 Rust 中使用闭包清晰管理状态转换。

创建你的状态定义结构体

struct States;
impl States
{
    fn a() -> &'static str { "a" }
    fn b() -> &'static str { "b" }
    fn c() -> &'static str { "c" }
}

创建一个新的 Stator 对象,指定初始状态

let mut state = Stator::new(States::a());

添加一些状态处理器

  1. Stator::any_state() 作为第一个参数,将自定义状态作为第二个参数,在状态进入时执行
  2. 将自定义状态作为第一个参数,将 Stator::any_state() 作为第二个参数,在状态退出时执行
  3. 将自定义状态作为两个参数,在两个状态之间的转换时执行
  4. Stator::any_state() 作为两个参数,在每次状态改变时执行
state.add_handler(States::a(), States::b(), |from: &String|
{
    println!("a -> b");
});

state.add_handler(Stator::any_state(), States::b(), |from: &String|
{
    println!("? -> b");
});

state.add_handler(States::a(), Stator::any_state(), |from: &String|
{
    println!("a -> ?");
});

state.add_handler(Stator::any_state(), States::a(), |from: &String|
{
    println!("? -> a");
});

在任何时候进入新状态

提示:不要将 Stator::any_state() 传递给 enter() 方法。

state.enter(States::b());

享受这个讽刺

Stator:定子是旋转系统的固定部分,在发电机、电动机、警报器或生物旋转器中找到。

无运行时依赖项