【问题标题】:Must Kotlin Local Functions be Declared Before Use必须在使用前声明 Kotlin 局部函数
【发布时间】:2017-10-02 02:42:43
【问题描述】:

在这个简单的代码示例中...

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

在语言的其他地方,允许在定义之前使用函数。但对于本地功能,情况似乎并非如此。参考Kotlin Language Specification,Local Functions 部分依然标注为“TODO”。

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

(当然,局部变量声明必须在使用之前进行,因此对局部函数的相同约束并非不合理。是否有明确的、最好是权威的源文档来讨论这种行为?)

【问题讨论】:

  • 局部函数可以使用局部变量,因此如果没有这个限制,您最终会得到一个更复杂的函数,例如“局部函数只能在声明它使用的所有局部变量后使用”。

标签: kotlin


【解决方案1】:

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

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

因此,在声明之前,您不能使用局部函数,就像您不能使用到那时尚未声明的局部变量一样:它只是超出了范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多