Skip to main content
Skip table of contents

Eval()


Eval() – Ausführung eines Codeblocks

Die Funktion führt einen precompilierten CodeBlock-Text ("TEvalBlock"-Objekt) aus (geliefert von der Funktion Compile()), oder führt einen direkt übergebenen CodeBlock-Text aus. Bei einem Fehler wird eine Exception ausgeworfen.
Wird im ersten Parameter ein Codeblock (Character) übergeben, so wird der auszuwertende Ausdruck optimiert, berechnet und sofort wieder verworfen. Dies führt bei längeren Funktionen, die mehrfach aufgerufen werden, zu einer niedrigen Ablaufgeschwindigkeit. Wird im ersten Parameter ein Objekt vom Typ 'TEvalBlock' (zovor mit Complile() erzeugt) übergeben, so bliebt die optimierte Funktion erhalten und Eval übergibt nur noch die Parameter an den Block.
Das Objekt "TEvalBlock" besitzt die Eigenschaft 'FuncText', die jederzeit änderbar ist. Eine neue Zuweisung erzeugt eine neue Funktionalität. Ein Fehler beim Erzeugen des Objektes oder bei der Änderung von 'FuncText' löst eine Exception aus, die im Rahmen einer Fehlerauffangroutine behandelt werden kann. Hier kann die Fehlernummer über die Eigenschaft 'ErrCode' ausgewertet werden.


ParameterBeschreibung

aBlock:U

Vollständiger CodeBlock-Text oder TEvalBlock-Objekt

aLocalParam:U

Parameter; default = null()

Rückgabewert

Undefiniert - Rückgabewert des CodeBlock-Textes

Beispiel

CODE
| aBlock, aFunction, i, aMax, oDab000:DB := 'waDAB000, 1' |

function MyBlockEval(aBlock)
   ShowMessage(Eval(aBlock, Time())),
end,

aFunction := '| oDab000, aIntro, aResult | '                         + crlf +
             '   aResult := aIntro + '                               + crlf +
             '              AllTrim(AllTrim(oDab000:Name1) + " " + ' + crlf +
             '              AllTrim(oDab000:Name2)), '               + crlf +
             '   DbSkip(1, oDab000), '                               + crlf +
             '   aResult',
aMax := 10,

// Ausführung eines nicht vorkompilierten Blocks mittels "Eval()"
DbGoTop(oDab000),
for i := 1 to aMax do
   WriteLn(Eval(aFunction, oDab000, 'Name: ')),
next,

// Ausführung eines vorkompilierten Blocks
// erzeugt ein TEvalBlock-Objekt
aBlock := Compile(aFunction),
if not Empty(aBlock) then
   for i := 1 to aMax do
      WriteLn(Eval(aBlock, oDab000, 'Name: ')),
   next,

   // eine neue Funktion zuweisen
   aBlock.FuncText := '"Nur noch Text ..."',
   WriteLn(Eval(aBlock)),

   // einen Fehler abfangen
   startseq,
      // A und B sind nicht definiert
      aBlock.FuncText := 'A + B',
      WriteLn('Dies wird nie ausgeführt!'),
   onerror
      WriteLn('Fehler im Codeblock: Code = ' + Str(aBlock.ErrCode)),
   stopseq,

   aBlock.FuncText := '| t | ' + crlf +
                      ' t + " - Ende"',
   // Übergabe als Parameter an Funktionen
   MyBlockEval(aBlock),
   DestroyObject(aBlock),
endif,

Weitere Verknüpfungen


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.