实现自定义重复直到结构

时间:2013-08-05 23:42:20

标签: scala

我的任务是编写一个可以像这样使用的自定义重复结构:

var i = 0
repeat {
    i = i + 1
}(i > 5)

最初,我有以下代码:

trait RepeatUntil {
  def repeat(f: => Unit)(condition: => Boolean): Unit = {
    if (!condition) {
      f
      repeat(f)(condition)
    }
  }
}

然而,在运行所有测试时(作为学生我不可见),有一项测试没有成功。在愚弄我的代码后,我得到了一个工作特征。我只是无法理解为什么我的代码可以正常工作,而我的初始代码不起作用。他们不一样吗?

trait RepeatUntil {
  def repeat(f: => Unit) (condition: => Boolean): Unit = {
    val result = f
    if(condition) result else repeat(f)(condition)
  }
}

1 个答案:

答案 0 :(得分:2)

在初始代码中,在执行大括号内的代码之前测试condition 。在更正的代码中,您在执行大括号内的代码后测试condition 。这将产生很大的不同,我很惊讶只有一次测试失败了! (也许在线评分程序在第一次测试失败时停止。)