Function IIF( theCond, theTrue, theFalse )
Dim theResult
If theCond Then
theResult = theTrue
Else
theResult = theFalse
End If
IIF = theResult
End Function
So I tried delaying evaluation:
Function EIF( theValue, theTest, theTrue, theFalse )
Dim theResult
Dim theBool
theTest = Replace( theTest, "$1", "theValue" )
theTrue = Replace( theTrue, "$1", "theValue" )
theFalse = Replace( theFalse, "$1", "theValue"
)
theBool = Eval( theTest )
If theBool = True Then
theResult = Eval( theTrue )
Else
theResult = Eval( theFalse )
End If
EIF = theResult
End Function
Calling it was to work like this,
i = 1
j = EIF(i,"$1=1","$1", "$1*$1")
That is, if i = 1 then j = i else j = i * i. If I'd just used IIF it would have been
i = 1
j = IIF(i=1,i,i*i)
and the true and false parts would have been evaluated
before invocation of the IIF function.I gave up in the end, but it was fun ... sort of.
2 comments:
What's wrong with
Function IIF(c, t, f)
Dim ret
If c Then
ret = Eval(t)
Else
ret = Eval(f)
End
IIF = ret
End Function
j = IIF(i=1, "i", "i*i")
That seems to be what you're looking for — the lazy evaluation of t and f, not lazy evaluation of c!
D'oh!
This is part of the reason I got this blog off the ground ... I need the odd reality check which your comment graciously provides. Thanks!
--Bruce.
Post a Comment