我偶然发现了 8 年前的一个老问题(Kotlin:相互递归函数的尾递归),它讨论了 Kotlin 中的尾递归。然而,我关心的是函数的相互递归。
当尝试使用与提供的示例类似的代码时,我遇到一个错误,指出未声明“foo”。 Kotlin 是否引入了任何支持相互递归的更新或功能?是否有装饰器或替代方法可以在 Kotlin 中实现相互递归?
fun match(xs: Deque): Boolean {
fun boo(xs: Deque): Boolean {
...
return ... foo(...)
}
fun foo(xs: Deque): Boolean {
...
return ... boo(...)
}
return boo(xs)
}
...
错误:未解析的引用:函数名称
您的问题与链接的帖子甚至递归无关。
foo
和 boo
是嵌套函数,因此仅在执行周围的 match
函数时才声明它们。为此,它们出现的顺序是相关的:boo
无法访问foo
,因为foo
尚不存在。 foo
,但是,可以访问boo
。
要解决此问题,请使两个函数成为类或接口的成员,或者您可以将它们声明为文件级别的顶级函数。然后他们就可以看到对方并互相打电话。