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

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