blob: 41329db54c5a52768c870263fa8960a49762c8e9 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001
2 **********************************************************
3 * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
4 **********************************************************
5
6map_array(E)
7
8FUNKTION:
9 mixed *map(mixed *arr, string fun, object ob [, mixed extra])
10 mixed *map(mixed *arr, closure cl [, mixed extra])
11
12PARAMETER:
13 arr - zu mappendes Array
14 fun/cl - zu rufende Methode/Closure
15 ob - Objekt/Dateiname, an dem Methode gerufen werden soll
16 extra - weitere Parameter fuer Methode/Closure
17
18BESCHREIBUNG:
19 Mapped die Elemente aus 'arr' durch die Methode 'fun' oder die Closure 'cl'
20 in ein neues Array.
21 Fuer jedes Element aus 'arr' wird 'fun' oder 'cl' mit dem Element als
22 erstem Parameter [und folgend den optionalen Extra-Parametern] gerufen
23 bzw. 'map' mit dem Element indiziert.
24
25 Der Rueckgabewert der Methode/Closure wird in an der Indexposition des
26 Elementes in das neue Array eingetragen.
27
28 Verwendung von Methoden:
29 Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
30 oder Objekts angegeben wird, wird this_object() angenommen.
31
32 Verwendung von Closures:
33 Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
34 werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
35 'private' oder/und 'static' deklariert sein, muessen aber zu dem
36 Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
37
38RUeCKGABEWERT:
39 Array mit Rueckgabewerten der Methode/Closure.
40
41BEISPIELE:
42 ### ersetze Strings durch ihre Grosschreibung ###
43 map(({"abc","cde"}), #'capitalize); == ({"Abc","Cde"})
44
45
46 ### ersetze in einem Spielerobjektarray die Objekte durch ihre UID ###
47 // Folgend identische Resultate, aber andere Ansaetze:
48
49 #1: mit der Efun etuid direkt (ideal hier)
50 map(users(), #'getuid);
51
52 #2,3: mit Mapmethode
53 string make_uid(object o) {
54 return getuid(o);
55 }
56 #2: als LFun-Aufruf der Mapmethode
57 map(users(), "make_uid");
58 map(users(), "make_uid", this_object());
59
60 #3: als Lfun-Closure-Aufruf der Mapmethode
61 map(users(), #'make_uid);
62
63 #4: mit Lambda-Closure (langsamer, nicht fuer alle leserlich)
64 map(users(), lambda(({'x}), ({#'getuid, 'x})));
65
66AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
67 int i;
68 mixed *ret; mixed *input;
69
70 i=sizeof(input);
71 ret=allocate(i);
72 while(i--)
73 ret[i]=ob->fun(input[i] [, extra1, extra2, ...]));
74 // ret[i]=funcall(cl, input[i] [, extra1, extra2, ...]);
75
76HISTORY
77 Since LDMud 3.2.6 obsoleted by map().
78 Since LDMud 3.2.9, not available if driver is compiled without
79 USE_DEPRECATED.
80 Removed in LDMud 3.3 and LP "03.02.1@150".
81
82SIEHE AUCH:
83 Arrays: filter_array(E)
84 Objektarrays: filter_objects(E), map_objects(E)
85 Mappings: filter(E), map(E)
86
87 Sonstiges: sort_array(E), unique_array()
88 alist, transpose_array(E)
89
9029.10.2006 Zesstra