Seite 1 von 1

BEGIN SEQUENCE in Codeblocks

Verfasst: Di, 12. Mär 2024 15:35
von klammerauf
Hallo zusammen,

ich überlege gerade ob es nicht möglich wäre, innerhalb eines Codeblocks mit BEGIN SEQUENCE zu arbeiten.

Code: Alles auswählen

bCodeBlock := {|x,y|BEGIN SEQUENCE, x/y, ENDSEQUENCE}
EVAL( bCodeBlock, 10, 0 )
Mir ist schon klar, dass das im Code so nicht geht. Aber wird aus den ganzen SET-Befehlen sowie auch aus BEGIN SEQUENCE im Precompiler nicht eine Funktion draus? Eventuell könnte ich im Codeblock die Funktionsaufruf-Äquivalente verwenden.

Kann mir jemand sagen, ob BEGIN SEQUENCE im Precompiler umgewandelt wird?

Re: BEGIN SEQUENCE in Codeblocks

Verfasst: Di, 12. Mär 2024 15:46
von Marcus Herz
begin seuqnce wird nicht vom Precompiler umgesetzt.
Du kannst aber im Codeblock eine Funktion aufrufen:
So verhinderst du eine Meldung bei Div. durch 0,

Code: Alles auswählen

bCodeBlock := {|x,y| myFunction(x,y)}

static func myFunction(x,y)
local nRet := 0
local bErr := Errorblock(|| break()})
BEGIN SEQUENCE
nRet := x/y
ENDSEQUENCE
Errorblock(bRet)
return nRet

Re: BEGIN SEQUENCE in Codeblocks

Verfasst: Mi, 13. Mär 2024 14:02
von Marcus Herz
bzw. wenn s wirklich nur um Division durch 0 geht

Code: Alles auswählen

bCodeBlock := {|x,y| if(! y <> 0, x/y,  0)}
EVAL( bCodeBlock, 10, 0 )
es gibt ja kein Ergebnis bei /0, aber 0 als Returnwert ist dann meist programmtechnisch ok.

Re: BEGIN SEQUENCE in Codeblocks

Verfasst: Mi, 13. Mär 2024 15:42
von Jan
Hallo Sebastian,

wenn Du den Compilerschalter /p setzt schreibt der beim compilieren eine .ppo. In der all das steht, was der Precompiler aus Deinem Code macht. So kannst Du das ganz schnell mal kontrollieren.

Jan

Re: BEGIN SEQUENCE in Codeblocks

Verfasst: Mi, 13. Mär 2024 16:10
von Tom
Die Division durch Null ergibt zwar keinen Wert, aber im täglichen Betrieb kann's mal versehentlich vorkommen, und da ist dann Null als Ergebnis auch okay. Und um das zu erreichen, baut man's in die ErrorSys() (bzw. in den von ihr aufgerufenen Standard-Errorhandler):

Code: Alles auswählen

(...)
CASE oError:genCode == XPP_ERR_ZERODIV
      RETURN 0
(...)
Das wird auch schon so ausgeliefert, meine ich. Oder wurde.

Re: BEGIN SEQUENCE in Codeblocks

Verfasst: Mi, 13. Mär 2024 16:23
von Jan
Ist immer noch so

Jan