2013-03-28 74 views
2

ant-contrib中的for/foreach循环是否支持“break”或“continue”语句的等价物?据我所知,他们没有。中断还是继续执行?

有没有可行的解决方法?

感谢 -T

回答

4

还有就是要实现这一行为没有简单的方法,但也许下面的建议将帮助。

  • 使用的for task(即未在foreach)
  • 设置keepgoing属性设置为true
  • 使用fail task有一个条件,使得需要跳过的项目将会失败。

您可以通过定义属性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


要获得类似于cont inue

<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

+0

谢谢!这工作。 – 2013-04-08 19:34:55

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> 
+0

你的代码不起作用,你需要取消设置标志,如果它击中 – sloven 2017-03-03 21:10:09