什么是:变量,函数和类的局部声明在Kotlin中?

时间:2018-02-28 11:41:36

标签: kotlin

所以我开始学习kotlin进行android开发。 但是当我到达可见性主题时,我遇到了这个说明:

  

本地声明   局部变量,函数和类不能具有可见性修饰符。

Local declarations中的Kotlin是什么?

我问你这里巫婆意味着我已经在互联网上搜索了但是我得到的唯一结果是关于java和其他编程语言,我不想混淆事情,所以我可以避免混淆。 非常感谢提前

1 个答案:

答案 0 :(得分:1)

本地声明是放置在函数体(或构造函数,init块或属性访问器)内的声明。

这些声明只能在声明它们的词法范围内引用:

fun foo() { 
    if (Random().nextInt() % 2 == 0) {
        fun bar() { 
            println("bar") 
        }

        bar() // OK
    } else {
        bar() // Error: unresolved reference
    }
}

因此,这些声明永远不能在正文之外使用,因此可见性修饰符(通常控制声明是否可在类型或文件外部访问)对于本地声明而言毫无意义。

本地声明可用于仅在函数体内有意义但不在其他任何地方有意义的实体,或者不应在其他任何地方使用。

本地声明的有效用例示例是data class,用于计算的中间值:

fun getAndSaveEmails(people: List<Person>) { 
    data class PersonWithEmail(
        val person: Person, 
        val email: String
    )

    val peopleWithEmails = people.map { PersonWithEmail(it, requestEmail(it)) }

    peopleWithEmails.forEach { save(it.person, it.email) }
}