SYNOPSIS
        unknown call_other(object ob, string fun, mixed arg, ...)
        unknown call_other(object *ob, string fun, mixed arg, ...)

        ob->fun(mixed arg, ...)
        ob->"fun"(mixed arg, ...)
        ob->(fun)(mixed arg, ...)

BESCHREIBUNG
        Ruft die in einem anderen Objekt <ob> die Funktion <fun> mit den
        Argumenten <arg...> auf und gibt den Wert zurueck, der von der
        Funktion <fun> geliefert wird (oder 0 fuer nicht existierende oder
        als void deklarierte  Funktionen).

        Weiterhin wird auch ein Array von Objekten *<ob> akzeptiert. Die
        Funktion <fun> wird dann fuer jedes Objekt <ob> im Array mit den
        Argumenten <arg...> aufgerufen.
        Die einzelnen Resultate werden in einem Array zusammen gefasst und
        dieses Array dann als Endresultat von call_other() zurueck gegeben.
        Die Elemente von *<ob> koennen Objekte oder Namen von Objekten sein.
        Zerstoerte Objekte und 0 als Element geben eine 0 zurueck, fuehren
        aber nicht zu einem Fehler.

        Das Objekt (bzw. die Objekte) kann direkt oder ueber einen String
        (d.h. den Objektnamen) angegeben werden. Wenn ein String angegeben
        wird und das Objekt noch nicht existiert, wird es geladen.

        ob->fun(args) und "ob_name"->fun(args) sind aequivalent zu
        call_other(ob, "fun", args). Heutzutage kann "ob_name" auch eine
        Variable sein. ob->(fun)(args) ist aequivalent zu
        call_other(ob, fun, args), wobei <fun> ein Runtime Ausdruck ist,
        der den Funktionsnamen liefert.

        Wenn das Objekt <ob> keine oeffentliche Funktion mit dem Namen <fun>
        enthaelt, gibt call_other() den Wert 0 zurueck. Dies ist nicht
        unterscheidbar von einer Funktion <fun>, die 0 zurueck liefert.
        Oeffentlich bedeutet "public", wenn andere Objekte aufgerufen
        werden und "public" oder "static", wenn der Aufruf an this_object()
        ergeht. Funktionen, die "private" oder "protected" definiert sind,
        koennen niemals von call_other() aufgerufen werden.

        Der Rueckgabewert von call_other() ist standardmaessig 'any'. Falls
        aber #pragma strict_types gesetzt ist, ist der Rueckgabewert
        'unknown', und das Resultat des call_other() muss zuerst auf einen
        zutreffenden Variablentyp gecastet werden, bevor man es fuer etwas
        verwenden kann.

BEISPIELE
        Die nachfolgenden Beispiele rufen alle die Funktion "QueryProp" auf
        mit dem Argument P_SHORT.

            string str, fun;
            str = (string)call_other(this_player(), "QueryProp", P_SHORT);
            fun = "QueryProp";
            str = (string)call_other(this_player(), fun, P_SHORT);

            str = (string)this_player()->QueryProp(P_SHORT);
            str = (string)this_player()->"QueryProp"(P_SHORT);
            fun = "QueryProp";
            str = (string)this_player()->(fun)(P_SHORT);

        Solange #pragma strict_types gesetzt ist, muss man das Resultat von
        call_other() explizit auf einen passenden Typ casten, weil
        call_other() unknown liefert.

        Das folgende Statement ruft die lfun short() in allen aktiven
        Benutzern auf und speichert das gesammelte Resultat in einer
        Variablen:

            string *s;
            s = (string *)users()->short();
            !Compat: call_other("/users/luser/thing", "???", 0);
            Compat: call_other("users/luser/thing", "???", 0);

        Das sieht etwas merkwuerdig aus, wurde aber oft verwendet, um einfach
        ein Objekt zu laden. Dazu wurde die (nicht existierende) Funktion
        "???" im Objekt aufgerufen. Gluecklicherweise gibt es heute zu
        diesem Zweck die Efun load_object().

GESCHICHTE
        In LDMud 3.2.8 wurden die folgenden Verbesserungen eingefuehrt:
          - die Formen x->"y"() und x->(y)() werden erkannt;
          - die Form x->y() kollidiert nicht mehr mit einer lokalen Variablen,
            die auch "y" heisst.
          - eine simul_efun call_other() erwischt auch Aufrufe der Form ->().
          - call_other kann auch auf Arrays von Objekten angewandt werden.
        LDMud 3.2.10 machte den Aufruf von Objektarrays konfigurierbar.
        LDMud 3.3.113 fuehrte den Hook H_DEFAULT_METHOD ein.
        LDMud 3.5.0 machte den Aufruf von Objektarrays nicht mehr optional.

SIEHE AUCH
        call_direct(E), call_direct_resolved(E), call_resolved(E), create(A),
        pragma(LPC), extern_call(E), function_exists(E), functions(LPC),
        map_objects(E)
