MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | GESCHUETZT |
| 2 | SYNOPSIS |
| 3 | void set_this_object(object objekt-an-stelle-von-originalobjekt); |
| 4 | |
| 5 | BESCHREIBUNG |
| 6 | Dies ist eine geschuetzte Funktion, die nur vom Master-Objekt und im |
| 7 | Simul-Efun-Objekt genutzt werden darf. Bei sonstiger Benutzung |
| 8 | erzeugt diese Funktion einen Fehler. |
| 9 | |
| 10 | Die Funktion aendert das Resultat von this_object() in der laufenden |
| 11 | Funktion, ebenso das Resultat von previous_object() in Funktionen in |
| 12 | anderen Objekten, die einen call_other() Aufruf machen. |
| 13 | |
| 14 | Der Effekt von set_this_object() bleibt bestehen, bis ein externer |
| 15 | Funktionsaufruf abgeschlossen ist oder bis zu einem erneuten |
| 16 | set_this_object(). Waehrend der Ausfuehrung von Code im Master-Objekt |
| 17 | oder im Simul-Efun-Objekt ist set_this_object() garantiert, auch wenn |
| 18 | this_object() durch set_this_object() veraendert wird. Die gilt |
| 19 | nicht fuer Funktionen, die aus anderen Programmen inheritet werden. |
| 20 | |
| 21 | Diese Funktion darf nur mit hoechster Sorgfalt verwendet werden, um |
| 22 | Inkonsistenzen zu vermeiden. Nach einem Aufruf von set_this_object() |
| 23 | koennen sich gewisse LPC-Konstrukte merkwuerdig verhalten oder gar |
| 24 | das System zum Absturz bringen. Insbesondere die Verwendung von |
| 25 | globalen Variablen oder der Aufruf von lokalen Funktionen (ausser |
| 26 | durch call_other()) ist unzulaessig und wird aktiv verhindert. |
| 27 | |
| 28 | Erlaubt sind call_other(), map(), der Zugriff auf lokale Variablen |
| 29 | (die auch Pointer auf globale Arrays enthalten duerfen), einfache |
| 30 | Arithmetik und der Zuweisungs-Operator. |
| 31 | |
| 32 | BUGS |
| 33 | Es ist momentan nicht moeglich, das originale gueltige Objekt wieder |
| 34 | herzustellen. Anstelle von: |
| 35 | |
| 36 | object ich = this_object(); |
| 37 | set_this_object(dings); |
| 38 | <irgendwelcher Code> |
| 39 | set_this_object(ich); |
| 40 | <mehr Code> |
| 41 | |
| 42 | muss das ueber einen Umweg geloest werden: |
| 43 | |
| 44 | private void tuwas(object dings) |
| 45 | { |
| 46 | set_this_object(dings); |
| 47 | <irgendwelcher code> |
| 48 | } |
| 49 | |
| 50 | funcall(#'tuwas, dings); |
| 51 | <mehr Code> |
| 52 | |
| 53 | Manche Leute bezeichnen das als Feature. |
| 54 | |
| 55 | AENDERUNGEN |
| 56 | LDMud 3.2.10 verhindert aktiv die Referenz auf globale Variablen und |
| 57 | Funktionsaufrufe nach Adresse, waehren set_this_object() gilt. |
| 58 | |
| 59 | SIEHE AUCH |
| 60 | this_object(E), set_this_player(E) |