必须在使用之前声明Kotlin本地函数

在这个简单的代码示例中

fun testLocalFunctions() { aLocalFun() //compiler error: unresolved reference at aLocalFun fun aLocalFun() {} aLocalFun() //no error } 

在语言的其他地方,允许在定义之前使用函数。 但对于地方的职能,似乎并不是这样。 参考Kotlin语言规范 ,本地函数部分仍标记为“TODO”。

由于这种约束不适用于其他类型的函数(顶级和成员函数),这是一个错误吗?

(当然,局部变量声明必须在使用之前出现,所以对局部函数的相同约束并不是不合理的。是否有一个权威性的权威源文档来讨论这种行为?)

这不是一个错误,这是设计的行为。

当在表达式中使用符号(变量,类型或函数名称)时,该符号将针对某个作用域进行解析。 如果我们简化方案,则范围由包,导入,外部声明(例如类型的其他成员)形成,如果表达式放置在函数内,范围也包括表达式之前的本地声明。

所以,在声明之前,你不能使用本地函数,就像你不能使用一个局部变量一样,这个变量只是在范围之外。