| GESCHUETZT |
| SYNOPSIS |
| void set_this_object(object objekt-an-stelle-von-originalobjekt); |
| |
| BESCHREIBUNG |
| Dies ist eine geschuetzte Funktion, die nur vom Master-Objekt und im |
| Simul-Efun-Objekt genutzt werden darf. Bei sonstiger Benutzung |
| erzeugt diese Funktion einen Fehler. |
| |
| Die Funktion aendert das Resultat von this_object() in der laufenden |
| Funktion, ebenso das Resultat von previous_object() in Funktionen in |
| anderen Objekten, die einen call_other() Aufruf machen. |
| |
| Der Effekt von set_this_object() bleibt bestehen, bis ein externer |
| Funktionsaufruf abgeschlossen ist oder bis zu einem erneuten |
| set_this_object(). Waehrend der Ausfuehrung von Code im Master-Objekt |
| oder im Simul-Efun-Objekt ist set_this_object() garantiert, auch wenn |
| this_object() durch set_this_object() veraendert wird. Die gilt |
| nicht fuer Funktionen, die aus anderen Programmen inheritet werden. |
| |
| Diese Funktion darf nur mit hoechster Sorgfalt verwendet werden, um |
| Inkonsistenzen zu vermeiden. Nach einem Aufruf von set_this_object() |
| koennen sich gewisse LPC-Konstrukte merkwuerdig verhalten oder gar |
| das System zum Absturz bringen. Insbesondere die Verwendung von |
| globalen Variablen oder der Aufruf von lokalen Funktionen (ausser |
| durch call_other()) ist unzulaessig und wird aktiv verhindert. |
| |
| Erlaubt sind call_other(), map(), der Zugriff auf lokale Variablen |
| (die auch Pointer auf globale Arrays enthalten duerfen), einfache |
| Arithmetik und der Zuweisungs-Operator. |
| |
| BUGS |
| Es ist momentan nicht moeglich, das originale gueltige Objekt wieder |
| herzustellen. Anstelle von: |
| |
| object ich = this_object(); |
| set_this_object(dings); |
| <irgendwelcher Code> |
| set_this_object(ich); |
| <mehr Code> |
| |
| muss das ueber einen Umweg geloest werden: |
| |
| private void tuwas(object dings) |
| { |
| set_this_object(dings); |
| <irgendwelcher code> |
| } |
| |
| funcall(#'tuwas, dings); |
| <mehr Code> |
| |
| Manche Leute bezeichnen das als Feature. |
| |
| AENDERUNGEN |
| LDMud 3.2.10 verhindert aktiv die Referenz auf globale Variablen und |
| Funktionsaufrufe nach Adresse, waehren set_this_object() gilt. |
| |
| SIEHE AUCH |
| this_object(E), set_this_player(E) |