我很确定在大多数语言中,您可以通过执行以下操作之一来确保对条件的评估:
if FALSE and (1/0 = 0) {...}
或
if TRUE or (1/0 = 0) {...}
这些示例不应该抛出exeptions(可能是第二个取决于评估的内部实现),因为即使不检查第二个条件,也可以满足整个if条件。
在VBA中,这两种保护都不起作用:
If False and t() Then ...
If True or t() Then ...
Function t() As Boolean
MsgBox "This is displayed both times"
End Function
为什么VBA会采用这种方式行事,而采用这种保护的最佳(最短)方式是什么?
示例:If s = "" or thisFunctionCantTakeEmptyStrings(s) Then ...