ExecuteWeak
ExecuteWeak
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 wie bei Execute aufgerufen. Fehler, die innerhalb der Prozedur auftreten, werden aber im Gegensatz zu Execute nicht gemeldet, sondern durch einen INVALID-Wert auf dem Stack signalisiert. Im Erfolgsfall wird kein spezieller Wert auf den Stack gelegt. Will man also auf einen Fehler in der Ausführung prüfen, dann sollte vor is(INVALID) zusätzlich geprüft werden, ob überhaupt ein Wert auf dem Stack liegt, oder man sollte innerhalb der auszuführenden Prozedur im Erfolgsfall immer einen Wert auf den Stack legen.
Der Fehler selbst kann per CX_SYSTEM_OBJECT։։GetLastError aus dem Fehlerspeicher des Systems ausgelesen werden.
cancel wird durch ExecuteWeak nicht abgefangen.
-> items -> totalCost ({ // Calculate something totalCost items / Dup -> costPerItem // items could be 0! }) ExecuteWeak is(INVALID) if { SystemObject Call(GetLastError) // Handle error 0 -> costPerItem } // continue with calculation ...
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. Da in diseser Variante auch das Parsen des Codes innerhalb von ExecuteWeak ausgeführt wird, werden auch Parse-Fehler (Bsp. ungültige Variablenreferenz) durch ExecuteWeak abgefangen.
Var(myVar) "12 -> mxVar" ExecuteWeak // -> INVALID