Inhalt

Vorheriges Thema

45. Überblick Schalterleiste und Statuszeile

Nächstes Thema

47. Überblick UPDF-Dateien

Diese Seite

46. Überblick UniScript Objekte

46.1. Einführung

Die mit obj_create erzeugten Objekte haben ähnliche Eigenschaften wie Maps (siehe MapCreate). Sie haben gegenüber Maps jedoch einige Vorteile:

  • Einfachere Syntax z. B.:

    m = obj_create();
    m.a = 123;
    

    oder

    m = [. a = 123];
    

    anstatt

    hMap = MapCreate();
    MapSetAt(hMap, "a", 123);
    
  • Integer-Keys möglich z. B.:

    m = obj_create();
    m[23] = "Test";
    

    oder

    m = [. 23 = "Test"]
    

    (oder m.set_at(23, “Test”);)

  • Sortierte Keys, damit ist ein schneller Zugriff auf einen Bereich von Keys möglich (siehe obj_keys).

  • Editierbares XML-Dateiformat (siehe obj_save und obj_load).

  • Objekte können Objekte enthalten (siehe obj_set_at).

  • Automatische Speicherverwaltung: m = 0 löscht das Objekt m und alle Objekte die es enthält.

  • Objekte können um Funktionen erweitert werden (siehe obj_set_methods) und sie können Eigenschaften und Methoden von bereits existierenden Objekten “erben” (siehe obj_set_parent).

46.2. Standard-Funktionen

Die folgenden Funktionen können immer in der Form

obj_xxx(o, ...)

oder, kürzer, in der Form

o.xxx(...)

geschrieben werden. Also z. B. a = o.lookup() anstatt a = obj_lookup(o).

  UniScript-Objekt-Funktionen
obj_copy obj_copy erzeugt eine Kopie eines Objekts.
obj_count obj_count liefert die Anzahl an Variablen in einem Objekt.
obj_count_num obj_count_num liefert die Anzahl an Elementen mit Nummern-Keys in einem Objekt.
obj_count_str obj_count_str liefert die Anzahl an Elementen mit String-Keys in einem Objekt.
obj_create obj_create erzeugt ein UniScript-Objekt.
obj_has_key obj_has_key prüft, ob der gegebene Schlüssel (key) existiert.
obj_info obj_info liefert einen String der Form “obj-name,hex-adresse”.
obj_keys obj_keys liefert die Keys (oder eine Auswahl an Keys) eines Objekts.
obj_load obj_load lädt ein mit obj_save gespeichertes Objekt aus einer Datei oder aus einem String.
obj_lookup obj_lookup liefert den Wert zu einem Schlüssel (Key).
obj_methods obj_methods liefert das Objekt mit den Methoden (Member-Funktionen) des Objekts.
obj_parent obj_parent liefert das Parent-Objekt oder 0 wenn das Objekt kein Parent-Objekt hat.
obj_remove obj_remove entfernt ein key-value-Paar aus dem Objekt.
obj_save obj_save speichert ein Objekt in einer Datei oder in einer Zeichenkette.
obj_set_at obj_set_at fügt ein Schlüssel-Wert-Paar in das Objekt ein. Falls der Schlüssel bereits existierte wird der Wert durch den neuen Wert ersetzt.
obj_set_methods obj_set_methods setzt Methoden (Member-Funktionen) für das Objekt.
obj_set_parent obj_set_parent setzt das Parent-Objekt.
obj_set_str_return obj_set_str_return legt fest, ob obj_lookup einen leeren String oder die Zahl 0 zurückgibt, wenn ein Schlüssel nicht vorhanden ist.
set_method_table set_method_table setzt Methoden (Member-Funktionen) für ein Objekt.

46.3. Funktionen mit Objekten

Ein Objekt kann um Funktionen erweitert werden. Hier ein Beispiel:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
def file_methods()
{
    return [.
        read = "file_read",
        write = "file_write",
        name = "file_get_name",
        close = "file_close",
        __destructor__ = "file_close",
        __format__ = "file_format"];
}
def file_open(ssFileName, ssMode)
{
    fp = fopen(ssFileName, ssMode);
    if (!fp) {
        return 0;
    }
    this = [. fp = fp, name = ssFileName];
    set_method_table(this, "file");
    return this;
}
def file_format(file)
{
    return sprintf("fp = %d\nname = %s", file.fp, file.name);
}
def file_read(file, ssType, n)
{
    if (nargsin() == 2) {
        return fread(file.fp, ssType);
    } else {
        return fread(file.fp, ssType, n);
    }
}
def file_write(file, ssType, dat)
{
    return fwrite(file.fp, ssType, dat);
}
def file_get_name(file)
{
    return file["name"];
}
def file_close(file)
{
    fclose(file.fp);
}
def test()
{
    file = file_open("d:/test.txt", "wt")
    print file.name()
    file.write("char", "This is a test!")
    file.close()
    file = file_open("d:/test.txt", "rt")
    print file.read("char")
    file.close();
}

id-2115846