25 · Máquinas de Estado
Eventos tipados e dados de estado
Uma máquina tipada possui seus enums State e Event. Padrões de transição vinculam dados do evento e estado apenas nessa transição. Dados iniciais executam uma vez por instância. send retorna false quando nenhuma transição se aplica; can_send verifica padrões sem executar guards ou ações.
Nesta página
Uma máquina tipada possui seus enums State e Event. Padrões de transição vinculam dados do evento e estado apenas nessa transição. Dados iniciais executam uma vez por instância. send retorna false quando nenhuma transição se aplica; can_send verifica padrões sem executar guards ou ações.
Exemplo completo
Eventos tipados e dados de estado.
06-typed-events.zolo
// Typed catalogs make states and events ordinary nominal enum values.
machine Loader {
state Idle, Ready(value: int)
event Loaded(value: int), Reset
initial Idle
Idle -> Ready(value) on Loaded(value) if value > 0
Ready(previous) -> Idle on Reset
}
let loader = Loader.new()
print(loader.can_send(Loader::Event::Loaded(-1))) // true: structural applicability only
print(loader.send(Loader::Event::Loaded(-1))) // false: the guard is checked by send
print(loader.send(Loader::Event::Loaded(7))) // true
if let Loader::State::Ready(value) = loader.state { print(value) } // 7
print(loader.send(Loader::Event::Loaded(8))) // false: no transition from Ready
print(loader.send(Loader::Event::Reset)) // true
print(match loader.state { Loader::State::Idle => true, Loader::State::Ready(_) => false }) // true
Regras e comportamento
Estados e eventos tipados · Documentação
A partir de um checkout do repositório:
zolo examples/features/26-state-machines/06-typed-events.zolo
Veja também