makeUnifiedCall
Syntax
makeUnifiedCall(func, args)
Arguments
func is a function.
args is a tuple. Each element is a parameter of func. Since version 2.00.11.3, args can be metacode with a tuple expression.
Details
Generate metacode for function call. Use function eval to execute the metacode. The difference between
makeUnifiedCall
and the template function unifiedCall is that
makeUnifiedCall
doesn't execute the metacode.
Examples
mc = makeUnifiedCall(matrix, (1 2 3, 4 5 6));
mc;
// output
< matrix([1,2,3], [4,5,6]) >
mc.eval();
col1 | col2 |
---|---|
1 | 4 |
2 | 5 |
3 | 6 |
Since version 2.00.11.3, args can be tuple metacode to be dynamically passed to a function. The following example illustrates the difference between passing args as a tuple and tuple metacode.
x=3
y=5
a = makeUnifiedCall(add, (x,y)) // < add(3, 5) >
b = makeUnifiedCall(add, <(x,y)>) // < add(x, y) >
-
If args is a tuple,
makeUnifiedCall
passes the values of the variables in the tuple to func and generates< add(3, 5) >
. -
If args is metacode with a tuple expression,
makeUnifiedCall
passes the variables in the tuple expression to func and generates< add(x, y) >
.
When the value of x or y changes, the execution
result of a
remains unchanged while that of b
changes accordingly as it dynamically passes the values of x and
y.
x = 6
a.eval() // 3+5=8
b.eval() // 6+5=11
makeUnifiedCall
can also be used with
sqlTuple
and sql
to dynamically generate SQL
metacode. In the following example, the parameter args of
makeUnifiedCall
is tuple metacode generated using
sqlTuple
, and func is a user-defined function. The
result of makeUnifiedCall
is passed as the parameter select
of function sql
to generate SQL metacode c
.
// Create a user-defined function
f = def (x,y)->(x-y)/(x+y)
// Create a table for query
t = table(1.0 2.0 3.0 as qty1, 1.0 3.0 7.0 as qty2)
// Generate metacode for query
c = sql(select=makeUnifiedCall(f, sqlTuple(`qty1`qty2)), from=t)
// Execute the corresponding metacode
c.eval()
_qty1 |
---|
0 |
-0.2 |
-0.4 |
Related Information: sqlTuple