MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | SYNOPSIS |
| 2 | mixed * map(mixed *arg, string func, string|object ob, mixed extra...) |
| 3 | mixed * map(mixed *arg, closure cl, mixed extra...) |
| 4 | mixed * map(mixed *arg, mapping m [, int idx]) |
| 5 | |
| 6 | mixed * map(struct arg, string func, string|object ob, mixed extra...) |
| 7 | mixed * map(struct arg, closure cl, mixed extra...) |
| 8 | mixed * map(struct arg, mapping m [, int idx]) |
| 9 | |
| 10 | mapping map(mapping arg, string func, string|object ob, mixed extra...) |
| 11 | mapping map(mapping arg, closure cl, mixed extra...) |
| 12 | |
| 13 | string map(string arg, string func, string|object ob, mixed extra...) |
| 14 | string map(string arg, closure cl, mixed extra...) |
| 15 | string map(string arg, mapping m [, int idx]) |
| 16 | |
| 17 | BESCHREIBUNG |
| 18 | Ruft die Funktion <ob>-><func>() bzw. die Closure <cl> fuer jedes |
| 19 | Element des Strings, Arrays, Mappings oder der Struktur <arg> auf |
| 20 | und liefert ein Resultat, das aus den verschiedenen Rueckgabewerten |
| 21 | erstellt wurde. |
| 22 | |
| 23 | Wurde <ob> nicht angegeben, oder ist es weder ein String noch ein |
| 24 | Objekt, wird stattdessen this_object() verwendet. |
| 25 | |
| 26 | Ist <arg> ein Array, ein String oder eine Struktur, wird die Funktion |
| 27 | mit jedem Element des Arrays als erstem Parameter aufgerufen, gefolgt |
| 28 | von den <extra> Argumenten. Das Resultat der Efun ist ein Array, das |
| 29 | die Rueckgabewerte der Funktionsaufrufe enthaelt. Man koennte die |
| 30 | Operation map() deshalb umschreiben als: |
| 31 | |
| 32 | foreach(index) result[index] = ob->func(arg[index], extra...) |
| 33 | |
| 34 | Ist <arg> ein Array, ein String oder eine Struktur, und wurde statt |
| 35 | einer Funktion ein Mapping angegeben, so liefert map() ein Array mit |
| 36 | den Werten, die im Mapping an Stelle der urspruenglichen Werte stehen, |
| 37 | bzw. mit den Originalwerten, wenn fuer sie kein Mappingeintrag |
| 38 | existiert. Ist <idx> angegeben, so wird die entsprechende Spalte des |
| 39 | Mappings verwendet. Mit anderen Worten: |
| 40 | |
| 41 | foreach(index) |
| 42 | if (arg[index] ist ein Key in <arg>) |
| 43 | result[index] = map[arg[index]] oder map[arg[index]] |
| 44 | else |
| 45 | result[index] = arg[index] |
| 46 | |
| 47 | Ist <arg> ein Mapping, wird die Funktion fuer jeden Key des Mappings |
| 48 | als erstem Parameter und den Datenwerten (sofern vorhanden) als |
| 49 | zusaetzliche Argumente aufgerufen, gefolgt von den <extra> Argumenten. |
| 50 | Die <extra> Argumente duerfen keine geschuetzten Referenzen enthalten |
| 51 | (wie z.B. &(i[0])). Das Ergebnis der Efun ist ein Mapping, das die |
| 52 | Resultate der Funktionsaufrufe als Zuordnung zum jeweiligen Key |
| 53 | enthaelt. |
| 54 | |
| 55 | Abhaengig von der Breite des Mappings <arg>, kann die Operation |
| 56 | umschrieben werden als: |
| 57 | |
| 58 | foreach (key in arg) |
| 59 | switch (widthof(arg)) |
| 60 | case 0: |
| 61 | result[key] = ob->func(key, 0, extra...) |
| 62 | case 1: |
| 63 | result[key] = ob->func(key, arg[key], extra...) |
| 64 | else : |
| 65 | result[key] = ob->func( key |
| 66 | , ({ arg[key,0] ...arg[key,width-1] }) |
| 67 | , extra...) |
| 68 | |
| 69 | Der Vorteil dieses Ansatzes ist, dass beide Arten von mehrdimensionalen |
| 70 | Mappings (Mappings mit mehreren Werten pro Key und Mappings von Arrays) |
| 71 | gleich behandelt werden koennen. |
| 72 | |
| 73 | BEISPIELE |
| 74 | arr = ({ 1, 2, 3, 4 }); |
| 75 | m = ([ 1:-1, 3:-3 ]); |
| 76 | |
| 77 | map(arr, #'%, 2) --> liefert ({ 1, 0, 1, 0 }) |
| 78 | map(arr, m) --> liefert ([ -1, 2, -3, 4 }) |
| 79 | |
| 80 | ANMERKUNGEN |
| 81 | map() auf Arrays angewandt verhaelt sich wie map_array(), auf Mappings |
| 82 | angewandt hingegen verhaelt es sich wie eine Verallgemeinerung von |
| 83 | map_indices(). |
| 84 | |
| 85 | GESCHICHTE |
| 86 | Eingefuehrt in LDMud 3.2.6, loest map_array() ab. |
| 87 | LDMud 3.2.8 fuehrt neu die Moeglichkeit ein, ein Array durch ein |
| 88 | Mapping zu mappen. |
| 89 | LDMud 3.3.439 fuehrt map() fuer Strings ein. |
| 90 | LDMud 3.3.719 fuehrt den <idx>-Parameter fuer mappen mit Mappings ein. |
| 91 | |
| 92 | SIEHE AUCH |
| 93 | filter(E), filter_indices(E), map_indices(E), map_objects(E) |