Machine.initiate

From OpenEUO
Revision as of 17:13, 3 January 2011 by Ximan (Talk | contribs) (Upon Error)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Calling Pattern

Call

local m = sl.machine(a[,b])
-- later
local r = m.initiate([d[,...]])

Args

d1..dN optional are variadic arguments of any type

Results

r0..rN are values returned by the a.exit function

Example Usage

local s = {
 initiate = function(h,...) local a = {...} print('initiating '..a[1]) return 'a' end,
 a        = function(h) print('a')       return 'b'    end,
 b        = function(h) print('b')       return 'c'    end,
 c        = function(h) print('c')       return 'exit' end,
 exit     = function(h) print('exiting') return 999    end,
 monitor  = function(s,h,n,g) if g=='exit' then h[1]=h[1]+1; if h[1]<3 then g='a' end end; return g end,
 }
local h = {0}
local m = sl.machine(s,h)
local n = m.initiate('live')
print(tostring(n))
--> initiating live
    a
    b
    c
    a
    b
    c
    a
    b
    c
    exiting
    999

Description

Calling initiate begins the execution of a previously defined state machine object by calling the function associated with the 'initiate' key in the state table. If no errors are encountered during execution, initiate returns the results returned by the 'exit' state function.

Upon Error

Requesting a non-existent state key during any transition is an error. Errors occurring in any of the state functions are reported and handled according to the operant error redirection mode

See Also