2

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

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)
  }
}
4

1 回答 1

2

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

于 2013-08-05T23:44:46.800 回答