DESCRIPTION¶
Evaluates the closure cl
with the following arguments. If the last argument is an array or struct, it will be flattened: ie. the array/struct itself will be removed and its contents added to the argument list of cl
.
If cl
is not a closure, it will simply be returned (and all other arguments are ignored).
USAGE¶
The flattening of the last argument is the important difference between apply
(E) and funcall
(E). For example:
mixed eval(object ob, string func, mixed *args)
{
return apply(#'call_other, ob, func, args);
}
This will result in calling:
ob->func(args[0],args[1],...,args[sizeof(args)-1]).
Using funcall
(E) instead of apply
(E) would have given us:
ob->func(args).
Of course, with the ‘...’ operator we could also write:
mixed eval(object ob, string func, mixed *args)
{
return funcall(#'call_other, ob, func, args...);
}
and achieve the same result.
HISTORY¶
- introduced (3.2@70)
- changed (3.2.8) – adds the returning of a non-closure as first argument.
- changed (3.3) – added the ‘...’ operator and thus made
apply
(E) in fact redundant. - changed (3.3.266) – added support for structs.