MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | SYNOPSIS |
| 2 | mixed apply(closure cl, mixed arg, ...); |
| 3 | |
| 4 | BESCHREIBUNG |
| 5 | Wertet die Closure <cl> aus. Wenn <cl> keine Closure ist, wird <cl> |
| 6 | unveraendert zurueck geliefert und alle Argumente <arg> werden |
| 7 | ignoriert. |
| 8 | |
| 9 | Es gibt einen kleinen Unterschied zu funcall(), das ja im Wesentlichen |
| 10 | das gleiche tut (naemlich, eine Closure auswerten): wenn das letzte |
| 11 | Argument von apply() ein Array ist, wird jedes Element dieses Arrays |
| 12 | zu einem separaten zusaetzlichen Parameter der Closure umgewandelt. |
| 13 | |
| 14 | Eine moegliche Anwendung waere: |
| 15 | mixed eval(object ob,string func,mixed *args) |
| 16 | { |
| 17 | return apply(#'call_other,ob,func,args); |
| 18 | } |
| 19 | |
| 20 | Das fuehrt zu folgenden Aufrufen: |
| 21 | ob->func(args[0],args[1],...,args[sizeof(args)-1]) |
| 22 | |
| 23 | Waere stattdessen funcall() aufgerufen worden, so haette das ergeben: |
| 24 | ob->func(args) |
| 25 | |
| 26 | Eine wichtige Anwendung von apply() ist das Auswerten des |
| 27 | Array-Arguments in "varargs" Funktionen. |
| 28 | |
| 29 | AENDERUNGEN |
| 30 | Eingefuehrt in 3.2@70. |
| 31 | LDMud 3.2.8 fuehrte ein, dass das erste Argument zurueck gegeben wird, |
| 32 | wenn es sich nicht um eine Closure handelt. |
| 33 | |
| 34 | SIEHE AUCH |
| 35 | funcall(E), closures(LPC), varargs(LPC) |