也许我错过了什么,但令我很生气的是,VBScript似乎阅读了所有的OR条件。例如,我想做这样的事情:
If (oFS.FileExists(sFileLoc) = False) Or (sNewText <> oFS.OpenTextFile(sFileLoc).ReadAll) Then
现在我收到错误,因为第二个条件,该文件不存在。我希望如果文件不存在,VBScript会立即跳到结果,如果 ,它会检查第二个条件。
我是对的,这是正常行为吗?
答案 0 :(得分:3)
作为M. Harris already said in 2003和逻辑运算符的文档(例如Or)明确规定,VBScript不会使条件的评估短路。您必须使用nested Ifs或稍微看中Select Case
答案 1 :(得分:0)
您可以使用内联嵌套IF
来实现VBScript中的短路。例如,您可以像这样重写您的语句:
If oFS.FileExists(sFileLoc) Then If sNewText = oFS.OpenTextFile(sFileLoc).ReadAll Then
但是必须在与此语句相同的行中指定Then
条件。因此,如果由于这种情况需要执行多个操作,则必须使用冒号(:
)分隔语句,冒号是VBScript中的单行语句分隔符。
If oFS.FileExists(sFileLoc) Then If sNewText = oFS.OpenTextFile(sFileLoc).ReadAll Then x = 1 : y = 2
您也可以将您的逻辑移到Sub
或Function
并拨打电话:
If oFS.FileExists(sFileLoc) Then If sNewText = oFS.OpenTextFile(sFileLoc).ReadAll Then DoStuff
另请注意,如果您需要指定Else
子句,则必须在此行中指定。
If oFS.FileExists(sFileLoc) Then If sNewText = oFS.OpenTextFile(sFileLoc).ReadAll Then x = 1 Else x = 2