在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