Scala 如何在循环期间实现功能相似

Scala 如何在循环期间实现功能相似,scala,Scala,我尝试使用无限循环检查实现while循环,所以如果循环执行的次数超过CONST次,它就会抛出异常: val MAX_CYCLES = 1000000 @throws(classOf[InfinityLoopException]) def guardedWhile(condition: () => Boolean)(body: () => Unit): Unit = { var cnt = 0 while (condition.apply()) { body.appl

我尝试使用无限循环检查实现while循环,所以如果循环执行的次数超过
CONST
次,它就会抛出异常:

val MAX_CYCLES = 1000000

@throws(classOf[InfinityLoopException])
def guardedWhile(condition: () => Boolean)(body: () => Unit): Unit = {
  var cnt = 0
  while (condition.apply()) {
    body.apply()
    if (cnt > MAX_CYCLES) throw new InfinityLoopException()
    cnt += 1
  }

}

class InfinityLoopException() extends RuntimeException("Loop executed " + MAX_CYCLES + " cycles")
它可以工作,但我希望有非函数签名,如classic while:

var i = 0
guardedWhile(i < 5){
  println(i)
}
var i=0
保护期(i<5){
println(i)
}
目前我有:

var i = 0
guardedWhile(() => i < 5)(() => {
  println(i)
  i += 1
})
var i=0
当(()=>i<5)(()=>{
println(i)
i+=1
})

将参数更改为按名称调用

def guardedWhile(condition: => Boolean)(body: => Unit): Unit = { ...
然后直接引用它们

  while (condition) {
    body
    . . .
按名称调用意味着每次引用它们时都会重新计算它们