set_method_table

set_method_table setzt Methoden (Member-Funktionen) für ein Objekt.

obj = set_method_table(obj, ssClass)
obj = set_method_table(obj, ssClass, bUpdate)

Returnwert

obj ist ein Zeiger auf den ersten Parameter oder 0, wenn ein Fehler aufgetreten ist.

Parameter

obj

obj ist ein mit obj_create erzeugtes Objekt, dessen Methoden-Tabelle gesetzt werden soll.

ssClass

Um die Methoden-Tabelle zu setzen wird eine Funktion mit dem Namen ssClass + „_method“ aufgerufen, die die Methoden-Tabelle zurück geben muss. Siehe Kommentar.

bUpdate

Wenn der Parameter bUpdate TRUE (1) ist, wird die Funktion ssClass + "_methods" aufgerufen und die Methoden-Tabelle wird nach _g()._method_table kopiert. Die Methoden-Tabelle wird dann mit obj_set_methods dem Objekt obj zugewiesen.

Wenn der Parameter bUpdate FALSE (0) ist, wird die vorhandene _g()._method_table dem Objekt obj zugewiesen.

Wenn der Parameter bUpdate nicht angegeben wird, wird der Wert von _g()._debug für bUpdate verwendet. Das erstmalige Übersetzen einer UniScript-Datei (F4) setzt _g()._debug = 1.

Kommentar

Um eine Methoden-Tabelle zu erzeugen, müssen globale Funktionen definiert werden, die dann in eine Tabelle eingetragen werden müssen:

def my_obj_print(this)
{
   // ...
}

methodTable = [.
   print = "my_obj_print"
];

methodTable ist die Methoden-Tabelle.

Die Funktion set_method_table erwartet, dass eine Funktion mit dem Namen ssClass + „_methods“ existiert, die die Methoden-Tabelle zurück liefert:

def my_methods()
{
    return [.
        print = "my_obj_print"
    ];
}
o = [. a = 1, b = 2];
set_method_table(o, "my")

Die Methoden-Tabelle wird dann in der globalen Variablen _g()._method_table.my (siehe _g) gespeichert und der Zeiger auf das Objekt wird mit obj_set_methods im Objekt o gespeichert. Mit o.methods (siehe obj_methods) kann die Methoden-Tabelle des Objekts erfragt werden.

Beispiel

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def my_obj_print(this)
{
    k = this.keys
    for (i in 1:len(k)) {
        printf("%s = ", k[i]);
        print this[k[i]]
    }
}
def my_methods()
{
    return [.
        print = "my_obj_print",
        __print__ = "my_obj_print"];
}
def my_create()
{
    this = [.];
    set_method_table(this, "my");
    return this;
}
o = my_create();
o.a = 1;
o.b = 2;
o
print o
o.print()

History

Version Beschreibung
R2013.2 Defaultwert von bUpdate geändert (siehe oben) und Dokumentation ergänzt.
4.1.1 Neu.

id-1586543