TOC
Co-states
Usage
A state machine can be initialized by passing a blueprint of possible states and the corresponding events for the states.
/* A simple traffic light as a state machine implementation. */ blueprint = state: 'red' events: go: 'green' state: 'yellow' events: stop: 'red' state: 'green' events: warn: 'yellow' ; trafficLights = blueprint; return ;
New instances are automatically initialized with the first state in the blueprint.
var defaultState;defaultState = blueprint0state;return assert;
Functions of the same name as the events in the blueprint are added to the instance.
/* Get event list from blueprint. */ var eventList events; events = ; eventList = _; eventList; /* Check that functions are present. */ return events;
These functions change the machine state according to the blueprint.
/* A 'state:change' event is triggered on the state machine when state is changed. The current state and the next state are passed as extra parameters. */ trafficLights; /* Trigger state change. */ return trafficLights;
State can also be changed by triggering an event on the machine by the same name as the blueprint event.
trafficLights;/* Trigger state change. */return trafficLights;
State machine will throw an error if an invalid event is triggered.
/* An 'error' event is triggered when an invalid state event is attempted. An <Error> object is passed along with a helpful message. */ trafficLights; /* Trigger invalid event 'stop' for state 'red'. */ return trafficLights;
Co-states extends co-events so callbacks for events can be anything that co supports.
/* Generators FTW! */ trafficLights; return trafficLights;