为什么此代码无法运行,这是Kotlin中的错误吗?

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

我编写了一段代码,然后在出现错误时进行编译。但是当我运行时,它会引发异常(java.lang.NoClassDefFoundError:TesKt $ test $ 1 $ 1)。这是语言错误吗?

private fun test(block:()->Unit) = arrayOf(1).map {

    object {

        fun print() {
            println("Hello print")
            block()
        }
    }
}

fun main(args: Array<String>) {
    val array = test{println("Hello main")}
    array[0].print()
}
kotlin lambda classnotfoundexception
1个回答
0
投票

对象声明的kotlin documentaition提及以下内容:

“注意:对象声明不能是局部的(即直接嵌套在函数内部),但可以嵌套到其他对象声明或非内部类中。”

这里您的对象声明嵌套在函数内。

对象声明创建了一个新的作用域,并且来自外部作用域的变量或函数(例如您的块函数)不再可见,因此无法使用。

如果删除对象声明,一切将按预期工作:

private fun test(block:()->Unit) = arrayOf(1).map {
    {
        println("Hello print")
        block()
    }
}

fun main(args: Array<String>) {
    val array = test{println("Hello main")}
    array[0]()
}
© www.soinside.com 2019 - 2024. All rights reserved.