ant-contrib 中的 for/foreach 循环是否支持等效的“break”或“continue”语句?据我所知,他们没有。
有没有可行的变通办法?
谢谢-T
ant-contrib 中的 for/foreach 循环是否支持等效的“break”或“continue”语句?据我所知,他们没有。
有没有可行的变通办法?
谢谢-T
没有简单的方法来实现此行为,但也许以下建议会有所帮助。
每当您检测到需要中断时,您都可以通过定义属性来获得诸如中断之类的东西myBreakProperty
<for list="a,b,c,d,e" param="letter" keepgoing="true">
<sequential>
<if>
<equals arg1="@{letter}" arg2="c" />
<then>
<property name="myBreakProperty" value="nevermind the value"/>
</then>
</if>
<fail if="myBreakProperty"/>
<echo>Letter @{letter}</echo>
</sequential>
</for>
输出将是: Letter a Letter b
要获得类似continue的东西:
<for list="a,b,c,d,e" param="letter" keepgoing="true">
<sequential>
<if>
<equals arg1="@{letter}" arg2="c" />
<then>
<fail/>
</then>
</if>
<echo>Letter @{letter}</echo>
</sequential>
</for>
输出将是: Letter a Letter b Letter d Letter e
您可以创建一个中断流程,而不会运行像失败这样苛刻的事情。使用属性来检测何时要中断,您可以实现如下所示:
<var name="break.flag" unset="true"/>
<for list="a,b,c,d,e" param="letter">
<sequential>
<if>
<not>
<isset property="break.flag"/>
</not>
<then>
<if>
<equals arg1="@{letter}" arg2="c" />
<then>
<property name="break.flag" value="true"/>
</then>
</if>
<if>
<not>
<isset property="break.flag"/>
</not>
<then>
<echo>Letter @{letter}</echo>
<echo>Do the rest of the loop here</echo>
</then>
</if>
</then>
</if>
</sequential>
</for>
要真正打破循环,您可以将 fail 与 trycatch 一起使用
<trycatch>
<try>
<for param="i" begin="1" end="99">
<sequential>
...
<fail message="break" />
</sequential>
</for>
</try>
<catch />
</trycatch>