Ist nicht böse gemeint, aber wie ich im englischen Forum schon schrieb, halte ich nichts von diesen Inline-If Sachen (zumindest nicht in diesem selbstgemachten Zustand).
Speziell geht es um die Problematik, dass beide Zustände (True und False) immer ausgeführt werden, was in diesem Fall z.B. zu Problemen führt:
Code:
Macro Iif(Expression, TrueValue, FalseValue)
Bool(Expression) * TrueValue + Bool(Not (Expression)) * FalseValue
EndMacro
Define x.f
x.f = 2.0
Debug Iif(x<>0, 1/x, 0)
x.f = 0.0
Debug Iif(x<>0, 1/x, 0) ; sollte 0 zurückgeben
Probleme gibt es auch mit einer Prozedur, welche die Arithmetik umgeht:
Code:
Procedure.f Iif_(Query, True.f, False.f)
If Query
ProcedureReturn True
Else
ProcedureReturn False
EndIf
EndProcedure
Macro Iif(Expression, TrueValue, FalseValue)
Iif_(Bool(Expression), TrueValue, FalseValue)
EndMacro
Define x.f
x.f = 2.0
Debug Iif(x<>0, 1/x, 0)
x.f = 0.0
Debug Iif(x<>0, 1/x, 0)
Hier bekommt man sofort die Fehlermeldung, dass nicht durch Null geteilt werden darf, weil eben beide Parameter ausgeführt werden.
Darum hier meine Bitte, doch bitte lieber auf eine echte Implementierung zu warten, statt "unechte" Tricks zu posten.