阅读专家编写的 Scala 文档可以得到尾递归比 while 循环更好的印象,即使后者更简洁明了。这是一个例子
object Helpers {
implicit class IntWithTimes(val pip:Int) {
// Recursive
def times(f: => Unit):Unit = {
@tailrec
def loop(counter:Int):Unit = {
if (counter >0) { f; loop(counter-1) }
}
loop(pip)
}
// Explicit loop
def :@(f: => Unit) = {
var lc = pip
while (lc > 0) { f; lc -= 1 }
}
}
}
(需要明确的是,专家根本没有解决循环问题,但在示例中,他们选择以这种方式编写循环,就好像本能一样,这就是我提出的问题:我是否应该发展出类似的本能...... )
while 循环唯一可能更好的方面是迭代变量应该是循环体的局部变量,并且变量的变异应该在一个固定的位置,但 Scala 选择不提供这种语法。
清晰度是主观的,但问题是(尾)递归样式是否提供了改进的性能?