Scala有智能编译器吗?

Sil*_*ter 4 scala exception

我做了递归函数,就像

require : L (List[Int])
Run Code Online (Sandbox Code Playgroud)

L模式匹配

  1. Nil => Thread.dumpStack()
  2. x :: xs => print(x) + function(xs)
def function(L : List[Int]) {
    L match {
        case Nil => Thread.dumpStack()
        case x :: xs => print(x + " "); function(xs)
    }
}
Run Code Online (Sandbox Code Playgroud)

val l =(1到5).toList // function(l)

所以我认为这个函数在堆栈框架中n次,但它发生一次,我认为这个函数已经找到Nil并打印出异常Thread.dumpStack.

scala编译器是智能还是其他?

Rex*_*err 7

您正在观察尾递归:从一次迭代到下一次迭代没有任何内容存储,因此递归基本上由编译器转换为while循环.(所以,是的,编译器很聪明.)