Kotlin 支持互递归吗?

问题描述 投票:0回答:1

我偶然发现了 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)
}
...

错误:未解析的引用:函数名称

kotlin recursion mutual-recursion
1个回答
0
投票

您的问题与链接的帖子甚至递归无关。

foo
boo
是嵌套函数,因此仅在执行周围的
match
函数时才声明它们。为此,它们出现的顺序是相关的:
boo
无法访问
foo
,因为
foo
尚不存在。
foo
,但是,可以访问
boo

要解决此问题,请使两个函数成为类或接口的成员,或者您可以将它们声明为文件级别的顶级函数。然后他们就可以看到对方并互相打电话。

© www.soinside.com 2019 - 2024. All rights reserved.