MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | SYNOPSIS |
| 2 | closure symbol_function(symbol arg); |
| 3 | closrue symbol_function(string arg); |
| 4 | closure symbol_function(string arg, object|string obj); |
| 5 | |
| 6 | BESCHREIBUNG |
| 7 | Erzeugt eine Lfun-, Efun- oder Operator-Closure aus <arg>, wobei |
| 8 | <arg> entweder ein string oder ein symbol sein muss. Fuer |
| 9 | Lfun-Closures gibt <obj> an, zu welchem Objekt die Lfun gehoert, |
| 10 | entweder angegeben durch das Objekt selbst (bzw. einen pointer |
| 11 | darauf) oder durch den Objektnamen als String. Wenn ein String |
| 12 | angegeben wird, wird das Objekt beim Aufruf geladen. |
| 13 | |
| 14 | Wenn die Closure fuer eine Lfun in einem anderen als dem momentanen |
| 15 | Objekt erzeugt wird, ergibt dies eine "alien lfun closure". Solche |
| 16 | Closures sind an das Objekt gebunden, das symbol_function() |
| 17 | aufgerufen hat (dieses Objekt wird von to_object() geliefert), |
| 18 | obwohl der eigentliche Code in einem anderen Objekt steht (das mit |
| 19 | get_type_info() gefunden werden kann). |
| 20 | |
| 21 | Als "private" deklarierte Funktionen koennen auf diese Weise nie |
| 22 | zu einer Closure gewandelt werden, "static" und "protected" |
| 23 | deklarierte Lfuns nur dann, wenn <obj> das gueltige Objekt |
| 24 | (d.h. this_object()) ist. |
| 25 | Expord.h. tiert man die Closures, koennen sie unabhaengig vom Modifier der |
| 26 | Ursprungsfunktionen von jedem gerufen werden. |
| 27 | umgehen). |
| 28 | |
| 29 | BEISPIELE |
| 30 | symbol_function("efun::users"); |
| 31 | --> ergibt: #'users |
| 32 | symbol_function("QueryProp", other_obj); |
| 33 | --> ergibt: other_obj->QueryProp() |
| 34 | |
| 35 | SIEHE AUCH |
| 36 | lambda(E), quote(E) |