Lade...
 

Execute

Execute

Execute

Stack
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
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
 

 

InstantView Scriptsprache