在这个简单的代码示例中......
fun testLocalFunctions() {
aLocalFun() //compiler error: unresolved reference at aLocalFun
fun aLocalFun() {}
aLocalFun() //no error
}
在语言的其他地方,允许在定义之前使用函数。但对于本地功能,情况似乎并非如此。参考Kotlin Language Specification,本地功能部分仍标记为" TODO"。
由于这种约束不适用于其他类型的函数(顶级函数和成员函数),这是一个错误吗?
(当然,局部变量声明必须在使用之前发生,因此对局部函数的相同约束并非不合理。是否有一个权威的,最好是权威的源文档来讨论这种行为?)
答案 0 :(得分:4)
这不是错误,而是设计行为。
在表达式中使用符号(变量,类型或函数名称)时,将针对某个范围解析符号。如果我们简化方案,则范围由包,导入,外部声明(例如,类型的其他成员)形成,如果表达式放在函数内,则范围还包括表达式之前的局部声明。
因此,您不能使用本地函数,直到它被声明为您不能使用未声明的局部变量:它只是超出范围。< / p>