SYNOPSIS
mixed * filter(mixed *arg, string fun, string|object ob
, mixed extra...)
mixed * filter(mixed *arg, closure cl, mixed extra...)
mixed * filter(mixed *arg, mapping map, mixed extra...)
string filter(string arg, string fun, string|object ob
, mixed extra...)
string filter(string arg, closure cl, mixed extra...)
string filter(string arg, mapping map, mixed extra...)
mapping filter(mapping arg, string func, string|object ob
, mixed extra...)
mapping filter(mapping arg, closure cl, mixed extra...)
BESCHREIBUNG
Ruft fuer jedes Element des Arrays oder Mappings <arg> die Funktion
<ob>-><func>() bzw. die Closure <cl> auf und liefert jene Elemente,
fuer die die Funktion / Closure TRUE ergeben hat. Die <extra>
Argumente werden als zusaetzliche Parameter an die Funktion
uebergeben und duerfen keine Referenzen von Array- oder Mapping-
Elementen sein (wie &(i[1]) ).
Wird <ob> nicht angegeben oder ist es weder ein String noch ein
Objekt, wird standardmaessig this_object() verwendet.
Ist <arg> ein Array oder struct, wird <fun> mit jedem Element des
Arrays/der struct als ersten Parameter aufgerufen, gefolgt von den
<extra> Argumenten. Wenn das Resultat der Funktion TRUE ergibt, wird
das Element in das Ergebnis der filter() Operation mit einbezogen.
Wird filter() mit einem Mapping <map> anstelle der Funktion <func>
aufgerufen, wird jedes Element im Array <arg>, das ein Key von <map>
ist, ins Ergebnis mit einbezogen.
Wenn <arg> ein Mapping ist, wird die Funktion <func> mit jedem Key
als erstem und (falls vorhanden) den Werten dieses Keys als zweitem
Parameter, gefolgt von den <extra> Argumenten, aufgerufen. Wenn die
Funktion TRUE ergibt, wird das betreffende Element des Mappings ins
Ergebnis aufgenommen.
Abhaengig von der Groesse des Mappings <arg> erfolgt der Aufruf der
Funktion auf drei unterschiedliche Arten:
widthof(arg) == 0: ob->func(key, 0, extra...)
== 1: ob->func(key, arg[key], extra...)
> 1: ob->func( key
, ({ arg[key,0] ...arg[key,width-1] })
, extra...)
Der Vorteil dieser Vorgehensweise ist, dass beide Typen von
multidimensionalen Mappings (Mappings mit mehreren Werte pro Key und
Mappings aus Arrays) gleich verarbeitet werden koennen.
Ist <arg> ein String, werden der Filterfunktion die einzelnen Zeichen
des Strings uebergeben und nur jene Zeichen im zurueckgegebenen
String aufgenommen, fuer die die Filterfunkton != 0 zurueckgibt.
ANMERKUNGEN
Fuer Arrays wirkt filter() wie filter_array(), fuer Mappings stellt
filter() eine Verallgemeinerung von filter_indices() dar.
GESCHICHTE
Eingefuehrt in LDMud 3.2.6. Die Funktion loest filter_array() ab.
SIEHE AUCH
filter(E), filter_indices(E), map(E), walk_mapping(E), member(E),
m_contains(E)
|