Saltar al contenido

Introspección

En esta página

.transitions() devuelve un array de registros { from, to, event, after? } que describe toda la tabla de transiciones de la máquina — útil para generadores de grafos, renderizadores de diagramas, validadores y para probar la propia definición de la máquina.

La anotación after Ns en una transición registra un retraso informativo en el campo after del registro. El runtime no avanza automáticamente después de ese tiempo; combínalo con every/after del capítulo de concurrencia si deseas transiciones activadas por tiempo real.

Máquina Timed con anotaciones after; inspecciona la tabla y filtra la fila del evento "finish".

05-introspection.zolo
Playground
// Feature: `.transitions()` — list every transition the machine knows

// Syntax: returns an array of records `{ from, to, event, after? }`.

// Useful for tooling: graph generators, diagram renderers, validators.

// When to use: render the machine, generate documentation, diff two

// machine definitions, machine-test the machine.


// `after Ns` annotates a transition with a delay, recorded in the

// table but not enforced by the runtime — feed it to a scheduler if

// you need real time.

machine Timed {
  state Idle, Running, Done
  initial Idle
  Idle -> Running on start after 0s
  Running -> Done on finish after 5s
  Done -> Idle on reset
}

let t = Timed.new()
t.send("start")
print(t.state)

// expected: Running


t.send("finish")
print(t.state)

// expected: Done


// Inspect the transition table — print only the "finish" row.

let trans = t.transitions()
for row in trans {
  if row.event == "finish" {
    print(row.event)  // expected: finish

    print(row.from)  // expected: Running

    print(row.to)  // expected: Done

  }
}

Como .transitions() devuelve datos comunes — registros en un array — puedes iterar, filtrar y serializar con cualquier herramienta del lenguaje, sin dependencia de APIs especiales de reflexión.

Consulta también

Buscar en Zolo

9 resultados

enespt-br