Guard

From Erights

(Difference between revisions)
Jump to: navigation, search
m (fixing it a bit better (replaced the underscore with an space))
(reverted edit -- "DeepFrozen" is preferable to "Deep Frozen" since the former matches the name used in the language)
 
(4 intermediate revisions not shown)
Line 3: Line 3:
A Guard is used in the E language to guard the definition of a variable or the return value of a method. Implementors of Guard should always override __printOn/1 to print a guard expression reflecting the guard's value.
A Guard is used in the E language to guard the definition of a variable or the return value of a method. Implementors of Guard should always override __printOn/1 to print a guard expression reflecting the guard's value.
-
It is planned but not yet implemented that all objects used as guards must be [[Deep Frozen]].
+
It is planned but not yet implemented that all objects used as guards must be [[DeepFrozen]].
==Protocol==
==Protocol==

Latest revision as of 07:56, 18 September 2008

A Guard will either coerce an input to a value that matches some condition, or it will fail.

A Guard is used in the E language to guard the definition of a variable or the return value of a method. Implementors of Guard should always override __printOn/1 to print a guard expression reflecting the guard's value.

It is planned but not yet implemented that all objects used as guards must be DeepFrozen.

Protocol

coerce/2

Signature: coerce(specimen, optEjector :nullOk[OneArgFunc]) :any

If specimen coerces to a reference that matches the condition represented by this guard, return that reference; otherwise fail (according to optEjector) with a problem explaining why not.

If optEjector is null, then throw the problem. Otherwise, call optEjector with the problem. optEjector should perform a non-local exit, and so should not return. If optEjector returns anyway, then throw the problem after all.

(See also: the non-optional ejectors proposal.)

rangeSupersetOf/1

Signature: rangeSupersetOf(other :Guard) :nullOk[Boolean]

Experimental. See guard-based auditing.

Personal tools
more tools