fn:apply
Makes a dynamic call on a function with an argument list supplied in the form of an array.
Signature
fn:apply(
$function as function(*),
$array as array(*)
) as item()*
Properties
This function is deterministic, context-independent, focus-independent, and higher-order.
Rules
The result of the function is obtained by invoking the supplied function $function
with arguments
taken from the members of the supplied array $array
. The first argument of the function call is the first
member of $array
, the second argument is the second member of $array
, and so on.
The arity of the supplied function $function
must be the same as the size of the array $array
.
The effect of calling fn:apply($f, [$a, $b, $c, ...])
is the same as the effect of the dynamic function call
$f($a, $b, $c, ....)
. For example, the function conversion rules are applied to the supplied arguments
in the usual way.
Error Conditions
A dynamic error is raised if the arity of the function $function
is not the same as the size of the
array $array
([ERRFOAP0001]).
Notes
The function is useful where the arity of a function item is not known statically.
Examples
The expression fn:apply(fn:concat#3, ["a", "b", "c"])
returns "abc"
.
The expression fn:apply($f, array:subarray(["a", "b", "c", "d", "e", "f"], 1, fn:function-arity($f)))
calls the supplied function $f
supplying the number of arguments required by its arity.