我的任务是编写一个可以像这样使用的自定义重复结构:
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)
}
}
答案 0 :(得分:2)
在初始代码中,在执行大括号内的代码之前测试condition
。在更正的代码中,您在执行大括号内的代码后测试condition
。这将产生很大的不同,我很惊讶只有一次测试失败了! (也许在线评分程序在第一次测试失败时停止。)