Interface Expression.Comprehension<E extends Expression>
-
- All Known Implementing Classes:
CelExpr.CelComprehension
- Enclosing interface:
- Expression
public static interface Expression.Comprehension<E extends Expression>
A comprehension expression applied to a list or map.Comprehensions are not part of the core syntax, but enabled with macros. A macro matches a specific call signature within a parsed AST and replaces the call with an alternate AST block. Macro expansion happens at parse time.
The following macros are supported within CEL:
Aggregate type macros may be applied to all elements in a list or all keys in a map:
`all`, `exists`, `exists_one` - test a predicate expression against the inputs and return `true` if the predicate is satisfied for all, any, or only one value `list.all(x, x < 10)`. `filter` - test a predicate expression against the inputs and return the subset of elements which satisfy the predicate: `payments.filter(p, p > 1000)`. `map` - apply an expression to all elements in the input and return the output aggregate type: `[1, 2, 3].map(i, i * i)`.
The `has(m.x)` macro tests whether the property `x` is present in struct `m`. The semantics of this macro depend on the type of `m`. For proto2 messages `has(m.x)` is defined as 'defined, but not set`. For proto3, the macro tests whether the property is set to its default. For map and struct types, the macro tests whether the property `x` is defined on `m`.
Comprehension evaluation can be best visualized as the following pseudocode:
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description E
accuInit()
The initial value of the accumulator.java.lang.String
accuVar()
The name of the variable used for accumulation of the result.E
iterRange()
The range over which var iterates.java.lang.String
iterVar()
The name of the iteration variable.E
loopCondition()
An expression which can contain iter_var and accu_var.E
loopStep()
An expression which can contain iter_var and accu_var.E
result()
An expression which can contain accu_var.
-
-
-
Method Detail
-
iterVar
java.lang.String iterVar()
The name of the iteration variable.
-
iterRange
E iterRange()
The range over which var iterates.
-
accuVar
java.lang.String accuVar()
The name of the variable used for accumulation of the result.
-
accuInit
E accuInit()
The initial value of the accumulator.
-
loopCondition
E loopCondition()
An expression which can contain iter_var and accu_var.Returns false when the result has been computed and may be used as a hint to short-circuit the remainder of the comprehension.
-
loopStep
E loopStep()
An expression which can contain iter_var and accu_var.Computes the next value of accu_var.
-
result
E result()
An expression which can contain accu_var.Computes the result.
-
-