ant-contrib中的for / foreach循环是否支持等同于“break”或“continue”语句?据我所知,他们没有。
有没有可行的解决方法?
由于 -T
答案 0 :(得分:4)
没有简单的方法来实现此行为,但以下建议可能会有所帮助。
通过在检测到需要中断时定义属性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
获取类似继续:
的内容 <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
答案 1 :(得分:1)
您可以创建一个中断流程,而不会像失败一样运行苛刻的东西。使用属性来检测您何时想要中断,可以实现以下内容:
<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>
答案 2 :(得分:0)
要真正打破循环,您可以将失败与 trycatch 一起使用
<trycatch>
<try>
<for param="i" begin="1" end="99">
<sequential>
...
<fail message="break" />
</sequential>
</for>
</try>
<catch />
</trycatch>