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".
// 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