我做一个分层数据结构的东西,我已经设计了一个组的方法来遍历/如下所述与间接递归分析它。Scala可以为不同的方法调用对方的尾递归吗?
有方法a
,b
,c
和d
,都带有Unit
返回类型。首先调用方法a
。根据数据,它会做一些事情,然后停止或拨打b/c/d
之一。 b,c和d中的每一个都是一样的 - 每种方法可以暂停或者调用其他3种方法中的任何一种。那么,哪些方法被调用,其执行的顺序是未知的,直到运行时和递归是没有直接明显的,因为没有一种方法是直接调用自己(不要担心,每个方法将注释来描述的循环/递归特性调用)。
每个额外调用a
,b
,c
,或d
在每个方法执行的最后一件事,但它不是字面上每个方法的最后陈述;将会有一个if
或case
语句来控制哪一个将被调用。
鉴于没有方法直接调用自己,Scala编译器是否能够分析这个多层调用链并实现它的尾递归?
沿着那些我在想使每一个方法返回要执行的下一个方法(如函数式编程),而不是直接调用下一个方法,并返回'Unit'线。然后更高级别的方法将执行下一个方法,因此可以完全避免递归。 – Gigatron 2012-03-16 00:00:19
@Gigatron - 这几乎是'scala.util.control.TailCalls'的功能。 – 2012-03-16 16:16:52