Guarded Transitions

Guarded Transitions #

Use Guarded Transitions #

Also called “conditional transitions”.

When an event happens, the target state may depend on some condition.

To express this, add a :guard key in the transition map.

  • The first transition that has is condition met is selected.
  • If none is selected, the event is ignored.
(defn my-condition-fn [state event]
  ;; returns a boolean
  )

;; Part of the machine definition
{:states
  {:s1 {:on
        {:some-event [{:target :s2
                       :guard my-condition-fn
                       :actions some-action}
                      {:target :s3}]}}}}

If my-condition-fn returns true, then the target is :s2. Otherwise the target would be :s3.