Execute
Execute
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | eine Prozedur |
ab Top-1 | Parameter für die Prozedur | |
Stack(Out) | hängt vom ausgeführten Code ab |
Eine mit () auf den Stack gebrachte Prozedur wird aufgerufen. Im Gegensatz zu der zweiten Verwendung von Execute (STRING-Parameter) wird hier eine Prozedur regulär aufgerufen und damit auch ein Eintrag im Callstack erzeugt, was dazu führt, dass sich break, continue, return nur auf die ausgeführte Prozedur beziehen und nicht auf die umschließende Prozedur, die das Execute ausführt.
Eine Besonderheit ist hierbei zu beachten: Anonyme Prozeduren unterstützen sogenannte Closures und haben damit Zugriff auf die lokalen Variablen der definierenden Prozedur, wie das untere Beispiel zeigt. Den Ablauf der umschließenden Prozedur können sie jedoch nicht beeinflussen.
Define(Greet) "Hello World!" Attention(,INFO) ; (Greet) Execute // equivalent to Greet // or ({ "Hello World!" Attention(,INFO) }) Execute Define(ClosureTest) LocalVar(x) ({ 12 -> x }) Execute x //-> 12 ;
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | InstantView®-Anweisung als Zeichenkette |
ab Top-1 | weitere, von den Anweisungen benötigte Werte... | |
Stack(Out) | hängt vom ausgeführten Code ab |
Die Zeichenkette vom Stack-Top muss gültigen InstantView-Code enthalten, der dann im aktuellen Kontext übersetzt und ausgeführt wird. Der Code wird im Gegensatz zu der obigen Variante von Execute so ausgeführt, als würde der Code direkt in der Prozedur/Message stehen, die das Execute ausführt und damit hat dieser Code auch die Möglichkeit auf lokale Variablen dieser Prozedur zuzugreifen, oder den Ablauf per break, continue, return zu beeinflussen.
"\"Hello World!\" Attention(,INFO)" Execute
Verwandte Themen:
funktional Programmieren mit InstantView