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).
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).
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. |
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();
}
|
Siehe auch
id-2115846