我写了一个递归函数,就像这样:
require : L (List[Int])
L模式匹配
Nil => Thread.dumpStack()
x :: xs => print(x) + function(xs)
def function(L : List[Int]) { L match { case Nil => Thread.dumpStack() case x :: xs => print(x + " "); function(xs) } }
val l = (1 to 5).toList // function(l)
因此,我认为该函数在堆栈帧中多次出现,但实际上只出现了一次。我认为该函数已经找到了Nil
并打印出异常Thread.dumpStack
。
Scala编译器是否聪明还是其他什么原因呢?