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());
添加一些状态处理器
- 将
Stator::any_state()
作为第一个参数,将自定义状态作为第二个参数,在状态进入时执行 - 将自定义状态作为第一个参数,将
Stator::any_state()
作为第二个参数,在状态退出时执行 - 将自定义状态作为两个参数,在两个状态之间的转换时执行
- 将
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:定子是旋转系统的固定部分,在发电机、电动机、警报器或生物旋转器中找到。