Script expressions
Script expressions look the same as lambda expressions, but start with e:
instead of lambda:
.
There is a main difference between script expressions and lambda expressions:
Script expressions are evaluated during dfs compilation.
Therefore, script expressions can not use "references" to access fields in data-items.
Example
def topic = 'this/is/my/topic'
%% script expression, which uses the topic definition
def routing_key = e: str_replace(topic, '/', '.')
The above example will resolve to the following equivalent dfs script:
def topic = 'this/is/my/topic'
%% script expression, which uses the topic definition
def routing_key = 'this.is.my.topic'
References
References are used in lambda expression to access fields in data-items (data_points and data_batches). They cannot be used in script expressions, so the next example will throw an error during script compilation:
def base_topic = 'this/is/my/base/'
def topic = e: str_concat(base_topic, "data.postfix")
The above example will fail with the message: "Reference(s) used in inline-expression: data.postfix"
Note: We use double quotes to reference a field in the current data_item.
More examples
def new_id = 3
def def_inline = e: string(3 + 5 + sqrt(new_id))
def i_string = 'this is my string'
def def_inline_string = e: str_replace(i_string, 'i', 'a')
def batch_size = 50
|amqp_consume()
.bindings('this.is.my.binding.#')
%% use of script expression for node option,
%% we have to round to an integer with the `round` function
.prefetch(e: round(batch_size * 1.25) )
.exchange('x_xchange')
.queue('q_test')
|batch(batch_size)
.timeout(10s)
Script expression can be used for node parameters (except where a lambda expression is required of course), as long as the resulting value is of the required data-type.