Dokumentation zu: Set(L)

HR Image


FUNKTION:
        varargs mixed Set(string name, mixed wert, int typ);

ARGUMENTE:
        name: Der Name der Property, die manipuliert werden soll.
        wert: Der Wert, mit dem manipuliert wird.
        typ:  Die Eigenschaft der Property, die manipuliert werden soll.

BESCHREIBUNG:
        Eine der inneren Eigenschaften der Property name wird geaendert.
        'typ' ist dabei eines aus:
          F_VALUE        -   Der intern gespeicherte Wert der Property
          F_MODE         -   Der Zustand der Propertie (s.u.)
          F_QUERY_METHOD -   Die Abfrage-Closure
          F_SET_METHOD   -   Die Setz-Closure
          F_MODS         -   Die aktuellen Modifikatoren (nicht setzbar)

        Der Wert kann verschiedenes sein. Als F_VALUE haengt er von der
        Property selbst ab, der F_MODE ist immer ein Integer, die
        Methoden sind (gebundene!) Closures oder Null. Mods ein Array mit
        dem Aufbau ({ mod-obj1, wert1, mod-obj2, wert2, ... }).

        Fuer F_MODE kommen folgende Flags in Betracht:
        SAVE           -   Prop wird mit gespeichert
        PROTECTED      -   Nur this_object() kann F_MODE noch aendern
        SECURED        -   Wie PROTECTED aber nicht ruecksetzbar
        NOSETMETHOD    -   Keine Set-Methode => Nicht modifizierbar
        MODIFIABLE     -   ModifyProp() erlaubt

        Ein Setzen von Flags (Bits) mit F_MODE dreht die Bits jeweils einmal
        um (toggelt). Das heisst, wenn die Propertie schon SAVE ist, macht
        ein Set(prop, SAVE, F_MODE) sie wieder un-save. Besser und eindeutiger
        geht es, indem man Bitoperationen (s.u.) benutzt.

        Bitoperationen (F_MODE_AS, F_MODE_AD, F_VALUE_AS, F_VALUE_AD):
        Manchmal moechte man gezielt Bits eines F_MODE oder F_VALUE setzen
        oder loeschen. Normalerweise muesste man dazu den (alten) Wert
        zunaechst Abfragen und dann moifiziert setzen, damit man die anderen
        Bits nicht beeinflusst.
        Es gibt jedoch spezielle 'Subtypen', die einem diese Arbeit abnehmen.
        Das Anhaengsel _AS steht fuer 'Setzen' und _AD fuer 'Loeschen'.
        Set(prop, SAVE, F_MODE_AS) setzt also auf jeden Fall das SAVE Flag,
        egal, ob es schon gesetzt war. Set(prop, 32, F_VALUE_AD) loescht
        Bit 5 aus dem Wert der Prop. Letzteres kann zu Laufzeitfehlern
        fuehren, wenn die Propertie gar keine Integerzahl gespeichert hat.

RÜCKGABEWERT:
        Das Ergebnis der Manipulation (abhaengig von typ).
        War der Typ F_VALUE, so werden weder Abfragemethoden noch
        Modifikatoren beruecksichtigt.

BEISPIELE:
        Setzen einer Abfragemethode fuer ein Property:
        Set(P_XYZ, #'meine_abfragefunktion, F_QUERY_METHOD);
        QueryProp(P_XYZ) liefert dann immer den Rueckgabewert der Funktion
        meine_abfragefunktion(). Zum Entfernen der Abfragemethode setzt
        man sie einfach auf 0:
        Set(P_XYZ, 0, F_QUERY_METHOD);

        Ob eine Abfragemethode gesetzt wurde. Sieht man mittels:
        Query(P_XYZ, F_QUERY_METHOD).

        Setzen einer Property unter Umgehung der Setzmethode (beide Aufrufe
        fuehren zum gleichen Ergebnis!):
        Set(P_XYZ, "bla", F_VALUE);

        Um eine Property speicherbar zu machen, geht man wie folgt vor:
        Set(P_XYZ, SAVE, F_MODE);
        Set(P_XYZ, SAVE, F_MODE_AS);
        Der erste Aufruf schaltet das SAVE-Flag nur um; wenn es schon gesetzt
        war, ist es nun geloescht! Der zweite Aufruf setzt das Flag auf jeden
        Fall, egal ob es schon gesetzt war oder nicht.

        Um zu erreichen, dass die Property sich mit SetProp() nicht setzen
        laesst, kann man einen der folgenden Aufrufe verwenden:
        Set(P_XYZ, NOSETMETHOD, F_MODE_AS);

SIEHE AUCH:
        SetProp(), QueryProp(), Query(), SetProperties(), QueryProperties(),
        ModifyProp(L), properties(C)


Start » Magierhandbuch » Docu » Lfun » Set Letzte Generierung: 25.04.2021, 01:58
Email an: mud@wl.mud.de
Valid HTML 4.01!