blob: 41329db54c5a52768c870263fa8960a49762c8e9 [file] [log] [blame]
**********************************************************
* ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
**********************************************************
map_array(E)
FUNKTION:
mixed *map(mixed *arr, string fun, object ob [, mixed extra])
mixed *map(mixed *arr, closure cl [, mixed extra])
PARAMETER:
arr - zu mappendes Array
fun/cl - zu rufende Methode/Closure
ob - Objekt/Dateiname, an dem Methode gerufen werden soll
extra - weitere Parameter fuer Methode/Closure
BESCHREIBUNG:
Mapped die Elemente aus 'arr' durch die Methode 'fun' oder die Closure 'cl'
in ein neues Array.
Fuer jedes Element aus 'arr' wird 'fun' oder 'cl' mit dem Element als
erstem Parameter [und folgend den optionalen Extra-Parametern] gerufen
bzw. 'map' mit dem Element indiziert.
Der Rueckgabewert der Methode/Closure wird in an der Indexposition des
Elementes in das neue Array eingetragen.
Verwendung von Methoden:
Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
oder Objekts angegeben wird, wird this_object() angenommen.
Verwendung von Closures:
Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
'private' oder/und 'static' deklariert sein, muessen aber zu dem
Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
RUeCKGABEWERT:
Array mit Rueckgabewerten der Methode/Closure.
BEISPIELE:
### ersetze Strings durch ihre Grosschreibung ###
map(({"abc","cde"}), #'capitalize); == ({"Abc","Cde"})
### ersetze in einem Spielerobjektarray die Objekte durch ihre UID ###
// Folgend identische Resultate, aber andere Ansaetze:
#1: mit der Efun etuid direkt (ideal hier)
map(users(), #'getuid);
#2,3: mit Mapmethode
string make_uid(object o) {
return getuid(o);
}
#2: als LFun-Aufruf der Mapmethode
map(users(), "make_uid");
map(users(), "make_uid", this_object());
#3: als Lfun-Closure-Aufruf der Mapmethode
map(users(), #'make_uid);
#4: mit Lambda-Closure (langsamer, nicht fuer alle leserlich)
map(users(), lambda(({'x}), ({#'getuid, 'x})));
AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
int i;
mixed *ret; mixed *input;
i=sizeof(input);
ret=allocate(i);
while(i--)
ret[i]=ob->fun(input[i] [, extra1, extra2, ...]));
// ret[i]=funcall(cl, input[i] [, extra1, extra2, ...]);
HISTORY
Since LDMud 3.2.6 obsoleted by map().
Since LDMud 3.2.9, not available if driver is compiled without
USE_DEPRECATED.
Removed in LDMud 3.3 and LP "03.02.1@150".
SIEHE AUCH:
Arrays: filter_array(E)
Objektarrays: filter_objects(E), map_objects(E)
Mappings: filter(E), map(E)
Sonstiges: sort_array(E), unique_array()
alist, transpose_array(E)
29.10.2006 Zesstra