如何做这样的代码groovy
?
do { x.doIt() } while (!x.isFinished())
因为groovy中没有do ... while
语法.
目前还没有'do ... while()'语法.
由于含糊不清,我们还没有增加对Groovy的支持
参考文献:
groovy - dev > 做的
从Classic迁移到JSR语法
Groovy文档 > 控制结构 > 循环
Rosetta Code > Loops/Do-while Groovy
小智.. 61
你可以滚动你自己的循环几乎你想要的.这是一个例子,loop { code } until { condition }
你不能有一个对应loop { code } while { condition }
因为while是一个关键字.但你可以称之为别的东西.
无论如何,这里有一些粗略的,准备好的循环代码,直到.一个问题是你需要使用大括号作为until条件才能使它成为一个闭包.它可能还有其他问题.
class Looper { private Closure code static Looper loop( Closure code ) { new Looper(code:code) } void until( Closure test ) { code() while (!test()) { code() } } }
用法:
import static Looper.* int i = 0 loop { println("Looping : " + i) i += 1 } until { i == 5 }
@Rao认为它是`loop({...}).until({...})`.所以`until()`在`loop()`的返回值上调用.Groovy命令表达式意味着你可以在`until()`前面省略`.`. (3认同)
tim_yates.. 22
根据你的用例,有这样的选项:在带有inputStream的Groovy中执行.. while()?
或者你可以这样做:
x.doIt() while( !x.finished ) { x.doIt() }
要么
while( true ) { x.doIt() if( x.finished ) break }
topr.. 15
如此多的答案,而不是一个没有冗余调用的答案(一个在循环之前,其余的在其中),很遗憾.
在Groovy中,这是最接近纯语言语法的do-while:
while ({ x.doIt() !x.isFinished() }()) continue
花括号内的最后一个语句(在闭包内)被评估为循环退出条件.
continue
可以使用分号而不是关键字.
关于它的其他好处,循环可以参数化(种类),如:
ClosuresomethingToDo = { foo -> foo.doIt() !foo.isFinished() }
然后在别处:
while (somethingToDo(x)) continue
以前我在这里提出了这个答案:在带有inputStream的Groovy中执行.. while()?
根据你的用例,有这样的选项:在带有inputStream的Groovy中执行.. while()?
或者你可以这样做:
x.doIt() while( !x.finished ) { x.doIt() }
要么
while( true ) { x.doIt() if( x.finished ) break }
如此多的答案,而不是一个没有冗余调用的答案(一个在循环之前,其余的在其中),很遗憾.
在Groovy中,这是最接近纯语言语法的do-while:
while ({ x.doIt() !x.isFinished() }()) continue
花括号内的最后一个语句(在闭包内)被评估为循环退出条件.
continue
可以使用分号而不是关键字.
关于它的其他好处,循环可以参数化(种类),如:
Closure<Boolean> somethingToDo = { foo -> foo.doIt() !foo.isFinished() }
然后在别处:
while (somethingToDo(x)) continue
以前我在这里提出了这个答案:在带有inputStream的Groovy中执行.. while()?
你可以滚动你自己的循环几乎你想要的.这是一个例子,loop { code } until { condition }
你不能有一个对应loop { code } while { condition }
因为while是一个关键字.但你可以称之为别的东西.
无论如何,这里有一些粗略的,准备好的循环代码,直到.一个问题是你需要使用大括号作为until条件才能使它成为一个闭包.它可能还有其他问题.
class Looper { private Closure code static Looper loop( Closure code ) { new Looper(code:code) } void until( Closure test ) { code() while (!test()) { code() } } }
用法:
import static Looper.* int i = 0 loop { println("Looping : " + i) i += 1 } until { i == 5 }
您可以在常规while循环中使用条件变量:
def keepGoing = true while( keepGoing ){ doSomething() keepGoing = ... // evaluate the loop condition here }
更新 Groovy 2.6已被放弃而专注于3.0。
从Groovy 2.6开始,启用新的Parrot Parser时支持do-while,默认情况下从Groovy 3.0开始。请参阅发行说明:
// classic Java-style do..while loop def count = 5 def fact = 1 do { fact *= count-- } while(count > 1) assert fact == 120