在VBScript上“继续”(到下一次迭代)

我和一个同事试图找出一种在VBScript“For / Next”循环中做相当于“continue”语句的方法。

在我们所看到的所有地方,我们发现人们无法在VBScript中做到这一点,没有讨厌的嵌套,这不是我们的select,因为它是一个相当大的循环。

我们提出这个想法。 它会像“继续(下一次迭代)”一样工作吗? 有没有人有更好的解决方法或改进build议?

For i=1 to N For workaroundloop = 1 to 1 [Code] If Condition1 Then Exit For End If [MoreCode] If Condition2 Then Exit For End If [MoreCode] If Condition2 Then Exit For End If [...] Next Next 

感谢您的意见

你的build议可能会奏效,但使用Do循环可能会更具可读性。

这实际上是C中的一个习惯用法,而不是使用goto,如果你想尽早地从结构中解脱出来,你可以用break语句做一个do {} while(0)循环。

 Dim i For i = 0 To 10 Do If i = 4 Then Exit Do WScript.Echo i Loop While False Next 

正如暗恋暗示的那样,如果删除额外的缩进级别,它看起来会更好一些。

 Dim i For i = 0 To 10: Do If i = 4 Then Exit Do WScript.Echo i Loop While False: Next 

一种select是将所有的代码放在一个Sub内部的循环中,然后在你想要“继续”的时候从这个Sub返回。

不完美,但我认为这将是更less的混淆额外的循环。

编辑:或者我想,如果你足够勇敢,你可以使用Goto以某种方式跳转到循环的开始(确保计数器得到正确更新),我认为VBScript支持,但您的声誉可能会受到影响有人发现你在你的代码中使用Goto 🙂

我决定使用一个布尔variables来跟踪for循环是否应该处理它的指令或跳到下一个迭代的解决scheme:

 Dim continue For Each item In collection continue = True If condition1 Then continue = False End If If continue Then 'Do work End If Next 

我发现嵌套循环解决scheme是明智的可读性有些混乱。 这种方法也有其自身的缺陷,因为循环在遇到continue之后不会立即跳到下一个迭代。 稍后的条件将有可能扭转continue的状态。 它在初始循环中也有一个二级构造,并且需要声明一个额外的variables。

哦,VBScript …叹了口气。

另外,如果你想使用被接受的答案,这不是太糟糕的可读性,你可以结合使用:将两个循环合并成一个似乎是一个:

 Dim i For i = 0 To 10 : Do If i = 4 Then Exit Do WScript.Echo i Loop While False : Next 

我发现消除额外的缩进级别是有用的。

我使用Do,Loop很多,但是我已经开始使用Sub或者一个可以退出的函数了。 这对我来说似乎更清洁。 如果你需要的variables不是全局的,你需要将它们传递给Sub。

 For i=1 to N DoWork i Next Sub DoWork(i) [Code] If Condition1 Then Exit Sub End If [MoreCode] If Condition2 Then Exit Sub End If [MoreCode] If Condition2 Then Exit Sub End If [...] End Sub 

实现迭代作为recursion函数。

 Function Iterate( i , N ) If i == N Then Exit Function End If [Code] If Condition1 Then Call Iterate( i+1, N ); Exit Function End If [Code] If Condition2 Then Call Iterate( i+1, N ); Exit Function End If Call Iterate( i+1, N ); End Function 

首先调用Iterate(1,N)

我们可以使用一个单独的函数来执行继续语句工作。 假设你有以下问题:

 for i=1 to 10 if(condition) then 'for loop body' contionue End If Next 

这里我们将使用for循环体的函数调用:

 for i=1 to 10 Call loopbody() next function loopbody() if(condition) then 'for loop body' Exit Function End If End Function 

循环将继续为函数退出语句….

尝试使用While / Wend和Do While / Loop语句…

 i = 1 While i < N + 1 Do While true [Code] If Condition1 Then Exit Do End If [MoreCode] If Condition2 Then Exit Do End If [...] Exit Do Loop Wend 
    Interesting Posts