Guard Conditions
Any statement in a postlude can have an optional guard condition. There are two types of guard conditions: if
and on final
.
If
The if
guard condition ensures that the postlude statement will only fire if the predicate in the guard is true.
The syntax is
<postlude_statement> if <predicate_expression>
For example:
fired { ent:page_count := ent:page_count + 2 if sunny() }
On Final
The on final
guard condition ensures that the postlude statement will only fire on the final time through the rule. Normally on final
is used inside a foreach
loop.
The syntax is
<postlude_statement> on final
Rules often raise explicit events in the postlude to signal other rules that they are finished and to indicate their exit state. Usually, a rule only wants to raise such an even once, even if the rule has a foreach
statement. For example:
rule show_tweets { select when explicit populate foreach tweet_list setting (tweet) pre { ... } append(...) fired { raise explicit event "tweets_shown" on final } }
In the preceding example, the rule will execute once for each of the tweets in the tweet list, but the explicite event tweets_shown
will only be raised once on the final time through the rule.
The on final
guard condition works even when foreach
loops are nested.
Copyright Picolabs | Licensed under Creative Commons.