Mar*_*szS 50 groovy loops do-while
如何做这样的代码groovy?
do {
x.doIt()
} while (!x.isFinished())
Run Code Online (Sandbox Code Playgroud)
因为groovy中没有do ... while语法.
目前还没有'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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
import static Looper.*
int i = 0
loop {
println("Looping : " + i)
i += 1
} until { i == 5 }
Run Code Online (Sandbox Code Playgroud)
tim*_*tes 22
根据你的用例,有这样的选项:在带有inputStream的Groovy中执行.. while()?
或者你可以这样做:
x.doIt()
while( !x.finished ) { x.doIt() }
Run Code Online (Sandbox Code Playgroud)
要么
while( true ) {
x.doIt()
if( x.finished ) break
}
Run Code Online (Sandbox Code Playgroud)
top*_*opr 15
如此多的答案,而不是一个没有冗余调用的答案(一个在循环之前,其余的在其中),很遗憾.
在Groovy中,这是最接近纯语言语法的do-while:
while ({
x.doIt()
!x.isFinished()
}()) continue
Run Code Online (Sandbox Code Playgroud)
花括号内的最后一个语句(在闭包内)被评估为循环退出条件.
continue可以使用分号而不是关键字.
关于它的其他好处,循环可以参数化(种类),如:
Closure<Boolean> somethingToDo = { foo ->
foo.doIt()
!foo.isFinished()
}
Run Code Online (Sandbox Code Playgroud)
然后在别处:
while (somethingToDo(x)) continue
Run Code Online (Sandbox Code Playgroud)
以前我在这里提出了这个答案:在带有inputStream的Groovy中执行.. while()?
更新 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
Run Code Online (Sandbox Code Playgroud)
您可以在常规while循环中使用条件变量:
def keepGoing = true
while( keepGoing ){
doSomething()
keepGoing = ... // evaluate the loop condition here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53817 次 |
| 最近记录: |